1

Petit programme pour mieux comprendre la détection de collision logicielle (sans utiliser la fonction hardware de la LYNX).

Le dossier à décompresser dans votre dossier LYNX
http://www.mirari.fr/SP1O


Ci-dessous quelques échantillons de ce que vous trouverez:

source:
http://www.mirari.fr/uctJ

.o
http://www.mirari.fr/mVFY

info
8XCb

images du jeu:
http://www.mirari.fr/NwLo

http://www.mirari.fr/6AIY

http://www.mirari.fr/0POF
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

2

tu devrais utiliser une structure contenant la position et les taille de tes sprites, et en faire des fonctions génériques,
la en dur ca peu aller avec deux sprites mais tu va vite te rendre fou si tu veut mettre un nombre de balle non fixe etc ..

si ca peu t'aider, j'avais écrit ca à l'époque, d'ailleurs aussi à l'origine pour un casse briques smile

// edit : nettoyage et simplification du code, upload sur mirari
et la le mec il le pécho par le bras et il lui dit '

3

r043v (./2) :
tu devrais utiliser une structure contenant la position et les taille de tes sprites, et en faire des fonctions génériques,
la en dur ca peu aller avec deux sprites mais tu va vite te rendre fou si tu veut mettre un nombre de balle non fixe etc ..

si ca peu t'aider, j'avais écrit ca à l'époque, d'ailleurs aussi à l'origine pour un casse brique smile.gif


C'est moi qui est demandé à Beauregard de prendre le temps de m'expliquer la façon la plus simple de gérer les collisions sur Lynx. Je n'ai pas l'intention de faire qqchose de bien complexe mais simplement comprendre comment ça marche.

Et à ce propos je suis content d'avoir trouver un nouveau prof je vais pouvoir laisser un peu Fadest et Vince tranquille.

Beauregard, d'abord merci à toi de perdre ton temps avec moi wink
Ensuite j'ai suivis à la lettre tes explication et aucun problème pour compilé ton programme (par contre qu'elle étrange façon de déclaré les sprites ?? J'ai pas vraiment tout compris mais bon ça marche) Le seul problème c'est que c'est déjà un niveau de programmation bien trop complexe pour moi, j'ai nettoyé un peu ton code des choses qui ne me sevraient pas mais je pense que bon nombre de lignes sont inutiles et me gêne dans la compréhension.

Moi je veux juste :
- un carré blancs de 4x4 qui ce déplace verticalement (ça c'est bon j'ai modifié ton code et le sprite pour y arriver)
- un carré rouge qui ce déplace uniquement sur X (ça aussi pas de problème ca marche)
puis je voudrais que lorsque le bas du carré blanc arrive en contact avec le haut du carré rouge placé sur sa trajectoire par le joueur cela réalise une action (genre affiche un nouveau sprite sur l'air de jeu ou incrémente un compteur de plus 1)

C'est cette derniere etape qui me pose probleme je n'arrive pas à voir ou dans ton code rajouter ma requete, j'ai essayer de faire un truc du genre :

if (posy-5<blancy+4)
{
SCBDATA(SCB) = nouveau sprite;
DrawSprite(SCBnouveau sprite);
}

Mais sans résultat...


Mon site sur la LYNX :ZoneLynx

4

sur lynx ou ailleurs, la logique d'une collision logicielle sera similaire,

et justement pour apprendre, si tu as :
if(pos_y - taille_y < blanc_pos_y + blanc_taille_y)
voir, même, if( (balle->y - balle->sy) < (raquette->y + raquette->sy) )
au lieu de if(posy-5<blancy+4)
ben j'imagine que tu comprendra plus simplement,
et si subitement tu veut changer la taille à 32 au lieu 5, tu passera pas 15 minutes à vérifier tout ton code, enfin moi je dit ca je dis rien hein
et la le mec il le pécho par le bras et il lui dit '

5

pencil
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

6

RYGAR (./3) :
puis je voudrais que lorsque le bas du carré blanc arrive en contact avec le haut du carré rouge placé sur sa trajectoire par le joueur cela réalise une action (genre affiche un nouveau sprite sur l'air de jeu ou incrémente un compteur de plus 1)

Zerosquare va apporter une réponse je pense.

Avant la boucle principale, je déclare des variables:int etape,posx,posy,blancx,blancy; int tempa, drapa;

là tu peux en déclarer des nouvelles, par exemple je rajoute ici la variable rgc:int etape,posx,posy,blancx,blancy; int tempa, drapa; int rgc;

plus bas, dans la boucle principale, tu peux lire le commentaire de la dernière ligne:
// Collision 2 // carré rouge intéractif avec carré blanc (taille 32*32): // X if (posy+5>blancy & posy-5<blancy+32) // posy+5 correspond au bord Bas du carré rouge // posy-5 correspond au bord Haut du carré rouge { if (posx+5>blancx & posx+5<blancx+10) {posx=blancx-5;SCBX(SCBro) = posx;} // teste le bord droite du carré rouge if (posx-5>blancx+22 & posx-5<blancx+32) {posx=blancx+36;SCBX(SCBro) = posx;} // teste le bord gauche du carré rouge } // Y if (posx+5>blancx & posx-5<blancx+32) // posx+5 correspond au bord Droite du carré rouge // posx-5 correspond au bord Gauche du carré rouge { if (posy+5>blancy & posy+5<blancy+10) {posy=blancy-5;SCBY(SCBro) = posy;} // teste le bord bas du carré rouge if (posy-5>blancy+22 & posy-5<blancy+32) {posy=blancy+36;SCBY(SCBro) = posy;} // teste le bord haut du carré rouge }

if (posy-5>blancy+22 & posy-5<blancy+32) {posy=blancy+36;SCBY(SCBro) = posy;} // teste le bord haut du carré rouge

là, je met en plus ++rgc;
if (posy-5>blancy+22 & posy-5<blancy+32) // teste le bord haut du carré rouge { posy=blancy+36;SCBY(SCBro) = posy; ++rgc; // incremente la variable rgc (rgc=rgc+1) }
RYGAR (./3) :
C'est cette derniere etape qui me pose probleme je n'arrive pas à voir ou dans ton code rajouter ma requete, j'ai essayer de faire un truc du genre :

if (posy-5<blancy+4)
{
SCBDATA(SCB) = nouveau sprite;
DrawSprite(SCBnouveau sprite);
}

Mais sans résultat...
il faut chainer les sprites au préalable. Il me semble que tu avais dis dans un message que tu avais chainé 60 ou 80 sprites, me trompe je ?

Quoi qu'il en soit, il faut :

1- déclarer tout tes sprites avant la boucle principale, puis les chainer.

2- dans la boucle principale, tu modifie seulement les coordonnées de ces sprites.

3- et donc ton programme aura un seul DrawSprite
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

7


C'est bon ça marche j'avais juste oublié un "DrawSprite(SCBbal2);" à la fin du code et comme je n'avais justement pas chainé ce sprite aux autre forcément ils n'apparaissait pas triso

Vivement lundi que je reprenne le boulot pour continuer à progressé dans l'étude du code (sans les enfants dans les pattes c'est plus simple d'avoir l'esprit clair smile )
Mon site sur la LYNX :ZoneLynx

8

Bon j'avance mais c'est lent tongue
Je suis parti sur l'idée d'un petit pong qui me semble assez simple et permettrait de bien comprendre l'histoire des collisions.
J'ai donc deux raquette une rouge une bleu et une balle blanche qui ce ballade de droite à gauche (oui je vais pas me lancer dans les histoires de trajectoires c'est pas le moment)

Donc la balle commence à ce déplacer à droite si je ne fais rien la balle rebondi sur le mur et par dans l'autre sens. Moi je voudrais que si je dirige la raquette de droite en face la balle la balle change de direction à son contact. J'ai tenté cela mais ça marche po sad

if (balley>raquetterougey-5)
{
--ballex;SCBX(SCBballe) = ballex;

}


Mon site sur la LYNX :ZoneLynx

9

RYGAR (./8) :
Bon j'avance mais c'est lent tongue
Je suis parti sur l'idée d'un petit pong qui me semble assez simple et permettrait de bien comprendre l'histoire des collisions.
J'ai donc deux raquette une rouge une bleu et une balle blanche qui ce ballade de droite à gauche (oui je vais pas me lancer dans les histoires de trajectoires c'est pas le moment)

Donc la balle commence à ce déplacer à droite si je ne fais rien la balle rebondi sur le mur et par dans l'autre sens. Moi je voudrais que si je dirige la raquette de droite en face la balle la balle change de direction à son contact. J'ai tenté cela mais ça marche po sad

if (balley>raquetterougey-5)
{
--ballex;SCBX(SCBballe) = ballex;

}

C'est normal que ça marche pas. Ta balle est un objet, et tout objet doit avoir un état... un peu comme les humains wink
exemple:
Si philippe = 0 Alors philippe fait dodo
Si philippe = 1 Alors philippe est réveillé
Si philippe = 2 Alors philippe marche tout droit
Si philippe = 4 Alors philippe se dirige vers à droite
Si philippe = 5 Alors philippe se dirige vers à gauche

Pour le jeu Fission, j'ai utilisé une variable, que j'ai nommé bdirx (ball direction X),
et j'ai décidé que:
Si bdirx = 1 Alors la balle va à droite
Si bdirx = -1 Alors la balle va à gauche

ça devrait donner ça: if (bdir == 1 & balley>raquetterougey-5) { bdir = -1; } if (bdir == 1) // Si ball va à droite, Alors... { ++ballex;SCBX(SCBballe) = ballex; } if (bdir == -1) // Si ball va à gauche, Alors... { --ballex;SCBX(SCBballe) = ballex; }


ps: Si tu as compris le code ci dessus, tu placera ensuite la première condition dans la 2ème, afin de limiter le nombre de condition lu par la machine à chaque boucle/cycle (la LYNX codé en C a des limites (8 bit))
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

10

Je pensais avoir un peu de temps pour reprendre la programmation mais non tsss
Pas moyen d'avoir la paix au boulot et à la maison avec les gamins qui passent leur temps à ce refiler des virus c'est injouable aussi sad
Cela avancera donc moins vite que j'aurais aimé mais ça avancera ca c'est sur smile

Petit hors sujet, j'aime bien connaitre la vie des gens qui programme car je suis toujours un peu admiratif des personnes ayant ce talent qui me fait défaut alors Beauregard comment en es tu arrivé à la programmation ? études boulot passion ???
Mon site sur la LYNX :ZoneLynx

11

Commodore Vic20...

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

12

RYGAR (./10) :
Petit hors sujet, j'aime bien connaitre la vie des gens qui programme car je suis toujours un peu admiratif des personnes ayant ce talent qui me fait défaut alors Beauregard comment en es tu arrivé à la programmation ? études boulot passion ???
Premier contact avec l'informatique pour tous à l'école, donc sur MO5 puis un Atari 800XL à la maison, mais je n'avais pas de réelle maitrise de ces machines, on dessinais des carrés et des cercles avec des commandes basiques toutes simples.

Pour moi, cela a véritablement commencé sur les automates programmables dans le cadre de mes études. En effet, c'est là que j'ai appris à structurer la programmation avec des organigrammes de programmations justement. J'ai obtenu un CAP et un BEP Electrotechnique, puis j'ai loupé mon BAC pro, puis j'ai fait mon armée.

Une fois dégagé de mes obligations, j'alterne entre de petits boulots stupides, et les découvertes de systèmes plus complexe que les automates: l'AMOS sur Amiga 500+, plus tard un PC, et là j'ai appris la retouche d'image, la 3D (modélisation et animation) grâce à Pixar (j'ai quelques talents de dessin). En 1998, je découvre un logiciel génial, TGF (The Game Factory), puis Dark Basic, je fais quelques jeux, dont Glob Shoot.

En 2002, je présente un jeu de réflexion à Infogrames à LYON et à Titus Interactive à Paris, les jeunes responsables m'en apprennent de belles sur leurs situations (l'argent ne va pas là où il faut), ils ne sont pas intéressés par mon jeu, il est vrai qu'il n'est pas du niveau de Tetris, mais bon, tant pis.

En 2004/2005 je ralentis, puis je cesse toute activité. En 2006, je décide de m'y remettre, sauf pour ce qui est de la 3D temps réel, que je juge trop "piégeux". Septembre 2009, je présente un jeu au Festival du Jeu Vidéo, seule la société Metaboli est intéressée, mais je suis très septique sur leur façon de voir le jeu vidéo. A cet époque, les petites sociétés sont super enthousiastes à l'idée de faire leurs jeux sur Iphone, DSIware... et bien sûr, aucun fabricant de jouet ne me contacte (trop tôt ?).

Aujourd'hui, je m'intéresse au monde des coopératives (de production et de commerce), car leurs fonctionnements, avec une répartition équitable du pouvoir et des richesses, permet une gestion plus raisonné de ces entreprises. Je suis actuellement en contact avec une des Fédérations des Scop... Et en attendant, je m'éclate sur la LYNX ! smile
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

13

Tu devrais présenter tes jeux Lynx sur le forum anglophone Atari Age. Ils devraient intéresser pas mal de monde.
avatar
Futur ex éditeur de jeux Atari Lynx et Nintendo Game Boy
https://yastuna-games.com

14

Sacré parcourt top Très intéressant à lire.
En tout cas tu as un sacrée niveau en dessin et programmation et de très bonnes idées. L'époque ou des jeux réalisés par un seul homme pouvait créer l'évènement est sans doute bel et bien révolue mais il n'empêche que c'est beau de voir encore des passionnés comme toi et d'autre sur le forum ce lancer dans ce genre de défis.
Mon site sur la LYNX :ZoneLynx

15

RYGAR (./14) :
Sacré parcourt top Très intéressant à lire.
En tout cas tu as un sacrée niveau en dessin et programmation et de très bonnes idées. L'époque ou des jeux réalisés par un seul homme pouvait créer l'évènement est sans doute bel et bien révolue mais il n'empêche que c'est beau de voir encore des passionnés comme toi et d'autre sur le forum ce lancer dans ce genre de défis.
merci j-p smile Pas si révolu, puisque certains jeux sur Iphone sont l'oeuvre d'un seul concepteur, comme ce jeune de 14 ans qui a fait un jeu gratuit avec 1 ou 2 millions de téléchargements... l'histoire continu.
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

16

Fadest (./13) :
Tu devrais présenter tes jeux Lynx sur le forum anglophone Atari Age. Ils devraient intéresser pas mal de monde.

je viens de m'inscrire, pseudo philippe, l'inscription est bien validée mais impossible de répondre, il y a un message d'erreur:

An Error Occurred

Sorry, an error occurred. If you are unsure on how to use a feature, or don't know why you got this error message, try looking through the help files for more information.

[#103133] You do not have permission to reply to this topic.

De plus, je ne peux pas faire un nouveau sujet: You cannot start a new topic
rabbit
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

17

Si tu viens juste de t'inscrire, ton compte ne doit pas encore être activé, il faut attendre qu'un administrateur le valide (ça prend quelques heures).
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

18

ah merci je comprend, je suis un peu trop impatient.
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

19

Fadest (./13) :
Tu devrais présenter tes jeux Lynx sur le forum anglophone Atari Age. Ils devraient intéresser pas mal de monde.

avec mon niveau anglais ce n'est pas facile, mais maintenant c'est fait:
http://www.atariage.com/forums/topic/178417-glob-shhot/

J'aimerai que mon erreur de frappe soit corrigé pour le titre du post (shoot au lieu de shhot) je suis une banana
Si une âme charitable pouvait expliquer cela au modérateur d'atariage, ça serait cool.


On ne peut pas supprimer et même modifier un message sur le forum atariage.

avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx