SPRITE ENGINE : DE LA 2D FACILEMENT

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 4 févr. 2009 à 12:54
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 17 mai 2009 à 22:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49176-sprite-engine-de-la-2d-facilement

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
17 mai 2009 à 22:12
ne t'inquiète pas, j'ai laisser les 2 versions dans le zip ^^
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
15 mai 2009 à 18:59
Je vais pleurer si tu utilises plus mes compos ...

lol
Malheureusement, ce sera pas ajourd' hui non plus que je pourrais tester cette super source!

A+
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
8 avril 2009 à 01:52
j'ai été trop vite pour faire la source BASSMedia sans la TcySimpleGauge de Maurico ,
il faut retirer des uses cyBaseMeasure, cyCustomGauge, cySimpleGauge

et dans procedure TMainForm.ProgressBarFxOnChange (Sender : TObject)
il faut remplacer case TcySimpleGauge(Sender).Tag of par
case TTrackBar(Sender).Tag of

désolé ;)

PS : je changerais ça demain ... ou au moins fin de semaine :)
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
6 avril 2009 à 23:50
désolé du double post : pour voir la capture il faut vider le cache du browser (ou sous FF : ctrl+F5 )
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
6 avril 2009 à 23:47
Maj plus ou moins importantes :

La source BASSMedia (Mixer ) est moins complet que mon précédent mais ce n'était pas le but , il permet toute fois de réaliser un mix avec tous les effets décrits plus haut

La source Flamme a aussi changé (ajout d'une musique de fond en midi pour montrer comment charger un plugin avec BASS )

la capture ne passe pas :(
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
28 févr. 2009 à 17:19
Voila , MAJ correspondante à la version de la lib utilisé pour mon jeu de shoot le canard !

Je viens de remarquer qu'il y a des constantes DECORATION , GRAVITY et autres dans uSprites (ce sont d'anciennes constante que je n'utilise plus , il ne faut pas en tenir compte )

Flamme et Animation&Sound sont nouveaux , le reste n'a pas changé ...
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 févr. 2009 à 16:20
oui, j'ai noté ce détail mais on retrouve malgré çà les mêmes vitesses entre les ballons...
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
15 févr. 2009 à 14:36
je ne comprends pas très bien ce que tu veux faire ?!
Dans ZTest , la vitesse du ballon est choisie au moment de sa création de manière aléatoire, puis ne change plus ..., juste son signe qui change (+ ou - )

Par contre l'indice Z augmente à chaque collision avec la fenêtre ...

Mais tu peux a tout moment modifier cela ;)

Tout est possible !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 févr. 2009 à 13:58
ah si, un tuc dans le Ztest, les ballons lents sont tous à la même vitesse et les rapides également..
Et si on tentait de mettre une vitesse aléatoire entre deux limites ?
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
15 févr. 2009 à 13:43
@cantador : regarde les commentaires de debiars et les miens(l'avant dernier au fait ) % à cette source , il y a une petite erreur que je n'ai pas encore corrigée dans le zip...
mais comme c'est minime, j'attends la prochaine MAJ pour corriger tout ça ;)

pour les idées de programmes, c'est ce que j'espérais ...
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
15 févr. 2009 à 13:20
Excellent les p'tits ballons Nicolas___ !
ça donne plein d'idées d'autres programmes..
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
15 févr. 2009 à 12:10
j'abandonne les rotations , il y a vraiment trop de problèmes vis à vis des collisions...
Ou il faudrait que j'arrive à trouver un exemple de "pixels detections" compréhensible et rapide !

Je suis en train d'essayer d'y greffer une partie sonore dessus (avec la librairie BASS bien sûr ) , en simple son il n'y a pas de problèmes mais quand je veux gérer des sons 3d (qui seront joué % à la position X et Y des sprites , et ou forcement un "Listener" devra être positionné (le joueur en l'occurrence ;) ) , je galère encore un peu !)

Un peu de new pour dire que je n'ai pas arrêter le projet mais que la prochaine évolution est plus longue que prévue ...

(Je suis surtout en train de coder de facon que mon ancien code soit encore bon , pas comme la dernière fois ... )
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
11 févr. 2009 à 19:33
oui j'ai vu ce petit problème dans simple move , il est présent dans flamme aussi. j'allais le changer .

Ton dernier commentaire n'était pas passé quand j'ai écrit le miens !

tu dois faire comme ca si tu veux qu'il soit "killer" quand il sort de l'écran :
cTop..cRight: kill;

ou tu testes chaque cas et tu appelles kill
cTop : kill;
cBottom: kill;
cLeft: kill;
cRight: kill;

et bien sur ne pas oublier d'appeler RemoveKillSprite ...
je changerais demain, je n'ai pas trop le temps ce soir ...
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
11 févr. 2009 à 18:40
tu as vu les exemples que j'ai ajouté ?
mais je n'avais pas parler de ce cas , c'est vrai ...
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
11 févr. 2009 à 18:36
Petit gag dans SimpleMove : les ballons sortant à droite et en haut n'était pas décompté donc, je présume, not killed...

J'ai donc, dans la procedure TBallon.CollideClientRect,
remplacé "cBottom ..cLeft : Kill;" par "cTop..cRight : Kill;" et ça gaze!
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
11 févr. 2009 à 18:03
Mille excuses! Je viens de trouver... je cherchais dans TSprite au lieu de TSpriteEngine!!?"!

Ca m'étonnait aussi...
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
11 févr. 2009 à 17:54
Ca y est, j'ai réussi à faire courir un chat... mais pour rendre le fond transparent, j'ai dû le colorier en fuschia, comme tes images. N'est-il pas possible d'imposer une couleur de transparence quelconque? En tout cas je n'ai rien trouvé dans ce sens.
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
10 févr. 2009 à 23:50
J'ai mis plusieurs petits exemples, j'espère qu'ils te seront utiles ...
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
10 févr. 2009 à 15:08
La luminosité de l'écran joue aussi un rôle important dans ce cas là ,trop sombre on ne voit rien ...
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
10 févr. 2009 à 14:38
Merci pour le tube*, avec alpha = 50 c'est bon.

*tube : petit tuyau :-)
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
10 févr. 2009 à 13:20
je viens de coder un petite fonction pour Activer , Désactiver l'alphablend pour te montrer , mais je viens de me rendre compte d'1 petit problème, il faut que j'y regarde de plus près ...

De plus , il faut toujours que je règle ce petit problème :

// msdn : Device does not support any of these capabilities.
if GetDeviceCaps(ACanvas.Handle,SHADEBLENDCAPS)= 0 then
isSupportAlphaBlend := false
else
isSupportAlphaBlend := true;

isSupportAlphaBlend := true;

vu que GetDeviceCaps me renvoit toujours false, je force isSupportAlphaBlend à true ... Je vois ça après les cours.

Je suis (depuis quelques temps déjà) en train de revoir mon code et de le commenter , je mettrais plus d'exemples (basiques et évolués)

De plus je suis en train de faire 1 petit jeu plus complet , ca servira pas mal pour comprendre les mécanismes

Attention :
Il y a une (petite) faute dans le projet Flamme :
SpriteEngine.Sort:=True; est inutile dans le Timer
vu qu'a chaque fois que l'on ajoute 1 objet dans le moteur, il trie la liste sur Z et que dans ce cas ci , contrairement à ZTest , la coordonnée Z des Flammes reste constante , il n'y a pas besoin de le re-trier!

En tout cas , merci pour l'appréciation , j'avais un peu peur que ce code tombe dans l'oubli ...
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
10 févr. 2009 à 11:44
Si tu crois que tu ne vois pas les object Floor de Type LAVE , c'est parce que son Alpha est à 25 donc fort transparent ...

Regarde Dans uFloor.pas , la methode Create appele celle-ci

procedure TFloor.SetTypeAnim(AType :TTypeFloor);
begin
case fType of
LAVE :
begin
SetAnimation(0,3,1,0,5);
// tu peux jouer avec cette valeur pour définir le niveau d'opacité
// [0,255]
Alpha:=25;
end;
end;
end;

et vu que mon Type est LAVE ... (en même temps, je n'ai que ça ici ! )

Si tu veux mieux le voir :
par le code , place 255 dans Alpha, ou mets le en commentaire (par défaut Alpha est à 255 )

A l'exécution :
Ou appuie sur F2 pendant l'exécution du programme (Flamme bien entendu) , tu ne verras plus le background mais bien juste Floor (de la lave animée, regarde le fichier MEDIA\GFX\FLOOR.bmp )

Est-ce que ça répond à ta question ?
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
10 févr. 2009 à 10:53
J'en pense beaucoup de bien, mais va me falloir un bout de temps pour dépuceler ton code...car je fatigue vite.

Une p'tite question : dans Flamme, à l'exécution, comment doit se comporter Floor, car si je vois bien le background, Mario et le flamme, pas plus de Floor que...

Il serait agréable que tu te fendes de quelques commentaires cocernant l'utilisation de tes objets, voir un tuto... ;)

Néamoins, bravo, j'en rêvais.

jp
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
8 févr. 2009 à 22:36
Alors, qu'en penses tu Debiars ?

Des idées ? Des améliorations ?

Nico
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
8 févr. 2009 à 17:02
Bonjour Nico,
Je rentre de voyage et je viens de découvir ton code...
Tu penses si ça m'intéresse, jz télécharge illico!
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
5 févr. 2009 à 15:35
Ah ok ...
En même temps , ce code ne servira vraiment qu'aux gens voulant réaliser des petits jeux, je ne vois pas à quoi il pourrait réellement servir d'autres ...

Sinon pas de remarque sur les classes ? Amélioration (je n'en doute pas ) ?
Utilisateur anonyme
5 févr. 2009 à 14:36
"Pleinement"
Exemple:
MonBitmap.bmp == BMP en 32Bits

Dans un OpenPictureDialog:
si tu sélectionnes MonBitmap il s'affiche (en prévisualisation et en vrai transparence) directement dans le dialog et bien sur aussi dans un TImage & TBitmap. Même en faisant TBitmap.Draw ... tu as la transparence.

donc peut importe le format de l'image et dans quel composant elle est chargée elle s'affichera correctement ;)

Par contre avec ton code ce n'est pas le cas ..
si tu charges un BMP32 dans un TBitmap et si tu l'assignes a un TImage tu 'aura pas de transparence ;)

mais c'est un détail ... ^^
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
5 févr. 2009 à 13:16
Déso Cirec , je me trompais avec une autre , je viens de tester , ca marche très bien ... désolé ;)

Je change de suite ...
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
5 févr. 2009 à 13:13
je sais mais bizarrement t'as fonction ne marche pas chez moi...
(elle doit bien remplacer la partie que tu viens de me citer ? )

Que veux tu dire par gérer pleinement le 32 bit ? Parce que si je charge une image 32 bits , j'ai la transparence qui est gérer nativement grâce à alphablend.

Nico
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
5 févr. 2009 à 12:16
C'est ce dont je te parlais dans mon space invaders, avec ce système, c'est beaucoup plus facile de réaliser des petits jeux ...

Je le ferais peut être pour mon space invaders mais je vois plus un futur jeu de plateforme...

Le meilleur serait de passer un jour en opengl ou directX ...

Merci pour la note

Nico
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
5 févr. 2009 à 09:32
J'aime bien ta gestion des sprites..
Si j'en ai l'utilité..
Peut-être faut-il l'adapter à ton space invaders ?
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
4 févr. 2009 à 13:49
je ne l'ai pas précisé , mais ca me semblait logique : Il n'y a rien à installer (pas de composant ou de lib externe à la mienne )

Testé uniquement sous D7 et Xp Sp3
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
4 févr. 2009 à 12:54
Par contre désolé mais il n'y a presque pas de commentaire , ce n'est pas très dur à comprendre , il y a quelques astuces quand même
(je remercie encore Cirec,rt15 et les autres qui m'ont aidé sur le forum ces temps ci )
Rejoignez-nous