dilluns, 23 de març del 2009

Sombres i espentes

Jope, al final no he pogut avançar tot el que volia, en part pel temps i en part per problems amb les sombres.


En principi, volia que el Patman tinguera sombres dinàmiques. Bàsicament, el que faria es: Si un objecte te marcat el flag de fer sombra, que mire baix d'ell. Si troba un objecte que el fique en sombra, sinó, que fique en sombra el piso. Pareixia simple.

Problema 1: els objectes no sempre estàn exàctament baix de altre objecte, sino que poden estar-ho parcialment.


Aixó es un problema que te cagues. En primer lloc, la sombra es pot repartir entre varios objectes. En eixe cas, he de pintar sombres parcials. Tenint en compte la quantitat de combinacions posibles (16 posicions diferents, 2^16=65536), implementar sombres com deu mana pot requerir més codi que tota la resta del joc.

En segon lloc, pot haver diversos objectes fent sombra parcial sobre un mateix objecte, amb el que tindría que comprovar colisions entre sombres, sinó les sombres s'acumularien, cosa que no es lògica.

No se que faré al final. El que tinc clar es que no vaig a fer unes sombres que me costen més que la resta del joc. Pero també tinc clar que algo al respecte m'agradaria fer. Ja vorem com acava la cosa, per ara les sombres han caigut al final de la llista de coses que fer.

Problema 2: El sistema de espentes pot arrivar a complicar-se prou. Tal i com tinc pensat fer-ho un objecte A que colisiona amb altre objecte B li envia una espenta amb la orientació i força especificada, i no es mou. El objecte B, al rebre la espenta, intentarà moures en eixa direcció. Si al intentar-ho fa una colisió amb altre objecte C, li enviarà una espenta i, igualment, no es mourà. Pero en cas de que sí es puga moure, ho farà i li enviarà una espenta al objecte A que li havia espentat, amb la força i orientació incial. Com el objecte B ja s'ha menejat, el objecte A al rebre l'espenta veu que sí es pot moure i ho fà.

Es un sistema de acció-reacció. El problema es pot presentar quan un objecte espenta dos objectes a l'hora. Els dos li respondràn amb una espenta per a que es moga, pel que el objecte A es mourà dos vegades! La segona vegada tornarà a espentar les caixes, i entrarà en un bucle fins que es topete amb altres objectes o amb la paret.

Altre problema diferent es quan un dels dos objectes a espentar sí es puga moure pero l'altre no. Un d'ells es mourà i l'altre no, ni el objecte que espentava tampoc, fent un efecte raro.

He de repensar millor este sistema de espentes.

7 comentaris:

  1. Respecte a les sombres (lo de les espentes ho he de rellegir) podries fer que nomes feren sombra els objectes estatics, es a dir, la estructura de la habitació llevat dels objectes movils.

    ResponElimina
  2. Te igual, es el mateix problema, ja que els objectes mòvils poden passar per baix dels estatics, necesitant fer sombres parcials.

    ResponElimina
  3. No no, eixos (els movils) son 'asombrables' sempre tenen llum. O si no, fes altra cosa, nomes sombra quan estan completament baix (o amb un marge del 50%). Es a dir, no fer subdivisions al pixel sino al tile o al mig tile.

    ResponElimina
  4. Espera, que estava fent-me el sopar i he pensat que no ho he explicat amb claredat. 2 opcions:

    Opció 1: Els objectes movils (inlcuit Patman i enemics) sempre estan iluminats. En este cas les sombres podrien trampejarse al fer el disseny de l'habitació i no estariem parlant de sombres dinamiques.

    Opció 2: Els objectes movils tenen 2 estats: iluminat o sense_iluminar (pero mai iluminat al 12%, al 25%, etc.) i deixarien de estar iluminats (es a dir, pasarien a ser la versió sombrejada) al estar completament baix del tile que els provoca la sombra o, en cas de estar entre dos tiles, quan tinga mes percentaje dins del tile ensombrit que del no ensombrit (lo de fer subdivisions al mig tile que comentava abans).

    Ale, gonne a fregir-me el peixet amb tota la tranquilitat del mon i a sabiendes de que he fet que el nou Patman (el Patman 2, of course) tinga sombres sucosetes.

    ResponElimina
  5. Mmm, no està mal (la opció 2). Implementaré eixa versió, encara que no estic convençut de que quede be del tot, pero ja vorem.

    Jo mes be diria que es un Patman 0.5.

    Per cert, ahir no vaig comentar res perque no hi havia res que comentar, ja que no vaig poder avançar res. A vore si hui hi ha més sort.

    ResponElimina
  6. Ja estic per ací, després d'unes falles i un principi de setmana ocupat. Veig que el desenvolupament del Patman avança a bon ritme.

    Sobre el problema de les sombres...
    igual dic tonteires per falta de coneixements tant del motor com de altres coses pero alla va
    No estas fent el motor en OpenGL? No pots pintar un quadre negre amb 50%,o el que siga, de transparencia a unes coordenades de proyeccio?

    Sobre les espentes als objectes...
    En el primer cas, no pots fer que B absorvisca la força d'espenta si no es mou? aixi a C l'espentarà amb força 0

    ResponElimina
  7. Respecte a les sombres: Use OpenGL, pero nomes per a obtindre l'acceleració que dona. En realitat es un motor 2D de tota la vida. el piso i les pareds son tiles de tota la vida sobre poligons quadrats sense perspectiva ni res.

    Respecte a les espentes: Crec que no t'he entes be. Si el primer cas vols dir el cas de que s'espenten en cadena, en eixe cas no hi havia ningún problema. La força se propaga entre els objectes, si algún de tots determina inequivocament que no pot moures, absorveix tota la força i ningú es mou.

    De totes formes, he decidit canviar un poc el sistema d'espentes. Esta vesprada ho comente.

    ResponElimina