Effet d'ombre avec des sprites
Effet d'ombre avec des sprites
Salut
Je galère sur un truc pour la création de mon jeu !
Comment faire un effet d'ombre pour un personage
j'ai un gros sprite qui sert de decord
et actuellement j'affiche un sprite tout bête sur le decord avec la commande DisplayTransparentSprite
Que me conseillez vous ? Passer tout en Sprite3D , restez en Sprite 2D ?
Auriez vous un petit exemple de code ?
Merci
Thyphoon
Je galère sur un truc pour la création de mon jeu !
Comment faire un effet d'ombre pour un personage
j'ai un gros sprite qui sert de decord
et actuellement j'affiche un sprite tout bête sur le decord avec la commande DisplayTransparentSprite
Que me conseillez vous ? Passer tout en Sprite3D , restez en Sprite 2D ?
Auriez vous un petit exemple de code ?
Merci
Thyphoon
Voilà ce que j'ai fait mais je ne suis pas satisfait l'ombre n'est pas assez opaque pas assez visible
Le jeu se déroule sur un ecran en 640X480
qu'en pensez vous ? des idées ? je maitrise pas du tout le Sprite3DBlendingMode donc peut être que c'est a ce niveau là que je peu jouer mais j'avoue que je met des valeur un peu au pif
Le jeu se déroule sur un ecran en 640X480
Code : Tout sélectionner
;On affiche le sprite du personage
TransparentSpriteColor(#perso, 255, 0, 255)
CopySprite(#perso,6,#PB_Sprite_Texture) ; je copie le sprite pour pouvoir le mettre en 3D
CreateSprite3D(6,6); hop en 3D
Start3D()
Sprite3DQuality(1)
h=SpriteHeight(6)
w=SpriteWidth(6)
d=(Xperso*20/640)-10
Debug(Str(d))
TransformSprite3D(6, 0+d,-5, w+d, -5, 0, h, w, h) ; l'ompre se deforme
TransparentSpriteColor(6, 255, 0, 255)
Sprite3DBlendingMode(11,10) ;mode d'affichage de l'ombre
DisplaySprite3D(6,Xperso+d,Yperso,255) ;on affiche l'ombre
Stop3D()
DisplayTransparentSprite(#Perso,Xperso,Yperso)
-
- Messages : 293
- Inscription : sam. 24/janv./2004 12:00
- Localisation : Toulouse (31)
- Contact :
moi j'aurait fait à partir d'un sprite 2 sprites 3D, un pour l'objet et l'autre je l'aurait rencouvert de noir sauf a la couleur de transparence et je l'aurait affiché en biais et en semi-transparence, enfin c'est ce que je ferait moi pour mon jeu
Débutant en programmation, notament en C++ ?
Vous souhaitez apprendre ?
Vous souhaitez apprendre ?
- Planet-DEV, le site (bientot)
- Le forum
Donc voilà ce que ça donne une procédure
Et ensuite dans la boucle principal :
Le rendu est exactement ce que je voulais....parcontre c'est beaucou plus gournand que je le pensais en resource !!!!il faut dire que j'ai pas trop comprit l'astuce pour les commandes StartSpecialFX()
Voilà pour l'instant si j'ai mieux je le posterais ici...si quelqu'un a une meilleur solution qu'il n'hesite pas a proposer
Thyphoon
Code : Tout sélectionner
Procedure OmbrageSprite(no.l)
StartDrawing(SpriteOutput(no))
For v = 0 To SpriteHeight(no)-1
For u = 0 To (SpriteWidth(no) - 1 )
CoulG = Point(u, v)
If CoulG=RGB(255,0,255)
Plot(u,v,RGB(0,0,0))
Else
Plot(u,v,RGB(1,1,1))
EndIf
Next
Next
StopDrawing()
EndProcedure
Code : Tout sélectionner
;Affichage du personnage
CopySprite(#perso, #ombre, 0) ; je copie le sprite du perso pour faire l'ombre
OmbrageSprite(#ombre); je transforme le sprite qui sert a l'ombre
DisplayTranslucideSprite(#ombre,Xperso+7,Yperso,180); je l'affiche a l'ecran
TransparentSpriteColor(#perso, 255, 0, 255); transparence pour le sprite du perso
DisplayTransparentSprite(#perso,Xperso,Yperso); On affiche le perso
Voilà pour l'instant si j'ai mieux je le posterais ici...si quelqu'un a une meilleur solution qu'il n'hesite pas a proposer
Thyphoon
Dans un bloc startspecialfx()/stopspecialfx(), il vaut mieux n'utiliser que des sprites qui ont étés créés (ou chargés) avec le flag #pb_sprite_memory.
Par ex, tu devrai faire:
etc...
Par ex, tu devrai faire:
Code : Tout sélectionner
CopySprite(#perso, #ombre, #pb_sprite_memory)
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
pour filperj : Merci pour l'info mais je n'arrive pas utiliser StartSpecial FX...quand je l'utilise il y a mes sprites dit "normal" qui n'apparaisse plus... j'ai pas tres bien pigé ou mettre ces commandes...mais quand je les mets pas ça marche même si c'est lent !
Pour comtois: Tu as peut être raison car tout mes sprites on besoin d'une ombre...mais il y en a tellement (de sprite) que pour des economies de temps et de mémoire je préfèrerais utiliser une commande pour faire les ombres.
Côté puissance c'est marrant j'ai l'impression qu'avec mon PIV2GHz je dois faire beaucoup plus attention qu'avec mon 1200 et 68030 et le BlitzBasic... Je trouve qu'on arrive rapidement a une limitation des possibilités en 2D : Pourtant si on veut faire une appli pour AmigaOS et Linux en plus de windows ...on est vite limité ! Vous trouvez pas ?
Pour comtois: Tu as peut être raison car tout mes sprites on besoin d'une ombre...mais il y en a tellement (de sprite) que pour des economies de temps et de mémoire je préfèrerais utiliser une commande pour faire les ombres.
Côté puissance c'est marrant j'ai l'impression qu'avec mon PIV2GHz je dois faire beaucoup plus attention qu'avec mon 1200 et 68030 et le BlitzBasic... Je trouve qu'on arrive rapidement a une limitation des possibilités en 2D : Pourtant si on veut faire une appli pour AmigaOS et Linux en plus de windows ...on est vite limité ! Vous trouvez pas ?
non tu n'es pas si limité que çà. je t'assure...
ne serait qu'en connaissant ces jeux 2D fait en purebasic :
http://perso.wanadoo.fr/darkprograms/downloads.html
j'ai eu aussi un amiga1200 et je programmais dessus
en amos, en blitz...
avec "specialfx" tu comprendras pourquoi.
je vais essayé de te faire un exemple
ne serait qu'en connaissant ces jeux 2D fait en purebasic :
http://perso.wanadoo.fr/darkprograms/downloads.html
j'ai eu aussi un amiga1200 et je programmais dessus

en amos, en blitz...
avec "specialfx" tu comprendras pourquoi.
je vais essayé de te faire un exemple