PDA

View Full Version : [c++] Gaming: trasparenza e "salto".


Nataren
08-07-2011, 09:16
Salve a tutti, sono alle prese col creare un videogame a tempo perso ( ebbene si, non ho niente da fare )
Prego tutti quelli che risponderanno di non trattarmi male per le domande ( eventualmente ) troppo stupide :)


<<-- Sto avendo problemi nel -->>


Far saltare il personaggio:


Usando la piu semplificata forma " if (key[KEY_UP]) y=y-2; if (y<=0) y=0; "
Per far salire in alto l'oggetto pensavo di modificare la riga con:

1- Per renderlo un salto farlo arrivare a un definito pixel per poi farlo riscendere tornando alle coordinate del suolo ( pensavo con un while che quando si rompe entra nella fase discesa,come realizzarlo in scrittura corretta? )


2- E, quando trovo un oggetto fermo nella mappa, dove devo inserire che nella discesa del salto ci si fermi sopra? , nell'istruzione da movimento o da altre parti? Scrittura corretta? ( Pensavo a qualcosa del genere si ferma sulle cordinate del bordo dell'oggetto fisso +1 )



Secondo argomento:


1- Ho creato un campione base di personaggio ma ho riscontrato un problema: usando paint per crearlo, intorno ad esso rimane la bordatura del foglio, come faccio ad eliminarla? o al massimo, come rendo trasparente il bordo del personaggio? cè un colore apposta ?




Grazie mille per le eventuali risposte e scusate la grammatica ho tanto,troppo sonno.

EDIT: uso libreria api ALLEGRO.H

Enjoy! :D

banryu79
08-07-2011, 09:31
Ciao, posso aiutarti con questo:

Secondo argomento:

1- Ho creato un campione base di personaggio ma ho riscontrato un problema: usando paint per crearlo, intorno ad esso rimane la bordatura del foglio, come faccio ad eliminarla? o al massimo, come rendo trasparente il bordo del personaggio? cè un colore apposta ?

Devi colorare i pixel "trasparenti" della tua sprite con un colore "trasparente", ovvero che abbia il canale ALPHA (opacità) settato al valore minimo (ad esempio su un range di 255 valori, setti a 0 il canale).

Mi pare che con paint (MS Paint) non puoi farlo.
Io ti consiglio di usare questo programma, per disegnare le tue sprite: Paint.NET (http://www.getpaint.net/index.html). E' molto semplice da usare.

wingman87
08-07-2011, 09:38
Premettendo che non sono un esperto provo a dirti le idee che mi vengono in mente.
Per il salto proverei a dare una velocità iniziale verso l'alto al personaggio (solo se in quel momento è a terra) e gli abbinerei una accelerazione verso il basso che permane finché il personaggio è in aria (settando magari una velocità verso il basso di soglia oltre la quale non si può andare).
Per fermarlo quando giunge su una piattaforma dovresti gestire la collisione con la piattaforma stessa. Personalmente gestirei movimento e collisione in due punti diversi, per chiarezza.
Per la trasparenza io uso immagini png create con GIMP. Con paint non puoi gestire la trasparenza. Un'alternativa è scegliere un colore che sarà la trasparenza e al caricamento dell'immagine modificare i pixel di quel colore con dei pixel trasparenti.

EDIT: dopo aver letto il post di Angel): in effetti l'accelerazione verso il basso deve permanere sempre, in modo da cadere quando vai oltre una piattaforma (anche senza saltare). Eviti la compenetrazione tra personaggio e suolo gestendo le collisioni.

AngeL)
08-07-2011, 12:12
Per gestire salti, collisioni, piattaforme, ecc. la cosa migliore sarebbe scriverti un piccolo motore fisico.

Setti un'accelerazione costante verso il basso e a ogni frame aggiungi l'accelerazione alla velocità e poi la velocità alle coordinate; quando il personaggio salta, puoi dargli istantaneamente un'alta velocità verso l'alto oppure settare per un istante l'accelerazione verso l'alto.

Una base:float xAccel = 0, yAccel = -1.0,
xSpeed = 0, ySpeed = 0,
xPos = 0, yPos = 0;

//poi nel ciclo principale del programma:

xSpeed += xAccel;
ySpeed += yAccel;

xPos += xSpeed;
yPos += ySpeed;

//quando salta
ySpeed += 2.0; //per esempio

kevinpirola
08-07-2011, 12:34
l'idea di Angel) non è male, occhio però che devi strutturarlo bene e gestirlo al meglio, se ce la fai non avrai più problemi lo fai una volta e sei apposto...