Effet d'ombre avec des sprites

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Effet d'ombre avec des sprites

Message par Thyphoon »

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
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par 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

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)
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
Aranoth
Messages : 293
Inscription : sam. 24/janv./2004 12:00
Localisation : Toulouse (31)
Contact :

Message par Aranoth »

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 ?
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Pas bête ton idée....mais plus ça vas plus je pense que je vais le faire en Sprite 2D et non 3D, déjà pour garder une compatibilité avec linux, et AmigaOs. Mais ton idée est bonne !! :o)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Donc voilà ce que ça donne une procédure

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
Et ensuite dans la boucle principal :

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

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
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

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:

Code : Tout sélectionner

CopySprite(#perso, #ombre, #pb_sprite_memory)
etc...
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

j'ignore si ça représente bcp de sprites à calculer ,mais tu as peut-être intérêt à les calculer une bonne fois pour toute et les enregistrer sur ton disque .
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

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 ?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

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 :wink:
en amos, en blitz...

avec "specialfx" tu comprendras pourquoi.
je vais essayé de te faire un exemple
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Merci Flype ! je veux bien un exemple avec SpecialFx car je t'avoue que je n'arrive pas du tout a utilisé ce mode !! ça marche mieu quand je met SpecialFX() en commentaire que lorsque je le rajoute :roll:
merci d'avance
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

oui et bien ca ma fait pareil au debut...
bon patiente encore un peu je pars bosser, ce soir j'essaierai
Image
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Merci Flype !
hé hé ça me rassure de savoir que ça fait pareil chez toi :wink:
Bonne journée de boulot !!! :P
Répondre