60

Je viens de jeter un oeil à ton source.
Visiblement, tu veux créer 6 sprites en plus du fond.
Tu fais également une confusion entre les objets sprites (oeil, ball1, ...) et les descripteur de sprites (objets de type SCB) qui leur seront associés (edit : il faut dire que mon post explicatif précédent a du t'induire en erreur au niveau des noms, désolé).
Rien ne t'oblige à avoir 1 SCB par objet (sauf si tu veux chainer les objets pour des raisons de performance).
1 seul SCB opaque (le fond, déclaré en $c0) et un transparent (déclaré en $c7) peuvent suffire.
Mais il faut dans ce cas :
afficher le fond avec DrawSprite
associer le sprite 1 au SCB transparent (avec SCBDATA)
afficher le SCB avec DrawSprite
associer le sprite 2 au SCB transparent (avec SCBDATA)
afficher le SCB avec DrawSprite
associer le sprite 2 au SCB transparent (avec SCBDATA)
afficher le SCB avec DrawSprite


De la manière dont tu es parti (en chainant les SCB), tu dois déclarer les 6 structures (en C avec une déclaration de tableau extern char... + en assembleur pour charger le tableau)
Là, tu déclares une structure SCBs et en assembleur les 6 controlleurs avec des noms différents (qui en plus sont ceux de tes objets, donc tu effaces tes sprites.
Tu dois donc remplacer
extern char SCBs[];

par
extern char SCBoeil[];
extern char SCBball1[];
extern char SCBball2[];
extern char SCBball3[];
extern char SCBball4[];
extern char SCBball5[];
(mets bien SCB pour les distinguer devant sinon, c'est le même nom que tes objets)
Dans la partie assembleur; tu devrais avoir ça :
#asm           
_SCBoeil     dc.b $c7,$10,$20  
          dc.w _SCBball1,_oeil  
          dc.w 0,0,$100,$100  
          dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef  

_SCBball1     dc.b $c7,$10,$20  
          dc.w _SCBball2,ball1  
          dc.w 0,0,$100,$100  
          dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef  

_SCBball2     dc.b $c7,$10,$20  
         dc.w _SCBball3,ball2  
          dc.w 0,0,$100,$100  
          dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball3     dc.b $c7,$10,$20  
         dc.w _SCBball4,ball3  
          dc.w 0,0,$100,$100  
          dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef 

_SCBball4     dc.b $c7,$10,$20  
         dc.w _SCBball3,ball4  
          dc.w 0,0,$100,$100  
          dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef  

_SCBball5     dc.b $c7,$10,$20  
          dc.w 0,_ball5  
          dc.w 0,0,$100,$100  
          dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef     

#endasm 



Ensuite, dans le corps du programme :
tu ne dois plus faire référence à SCBs qui n'existe plus mais à SCBoeil, SCBball1, ...
Note : vu que dans ta déclaration assembleur, tu as déjà associé SCBoeil l'objet oeil, c'est inutile de faire un SCBDATA().
SCBX(SCBoeil) = 50;
SCBY(SCBoeil) = 50;
idem pour SCBball1, SCBball2, ...

Pour les DrawSprite, tu dois seulement faire le:
DrawSprite(SCB); // affiche le fond
DrawSprite(SCBoeil); // affiche tous les sprites vu qu'ils sont chainés


Voilà, j'espère que c'est plus clair. C'est vrai que la gestion de la mémoire en C est assez différente du GFA (moins masquée dirons nous)

61

mad

Mais pourquoi ça marche pas chez moi?!

Plus j'essai et plus j'ai des erreurs!

Depuis hier j'ai le même genre de message et meme en recopiant ton post fadest c'est la même chose. Le pb peut'il venir de ma librairie ou d'un pb de palette?

[URL=http://img211.imageshack.us/my.php?image=pbgn5.jpg][IMG]http://img211.imageshack.us/img211/4532/pbgn5.th.jpg[/IMG][/URL]


Et voici mon programme

#include <stdlib.h>
#include <lynx.h>
#include <lynxlib.h>
#include "inc\clown.pal"


#define SCREEN (MEMTOP-8160)
#define RENDER (MEMTOP-16320)


/* LYNX-specific #defines: */
#define JOY_RIGHT 0x10
#define JOY_LEFT 0x20
#define JOY_DOWN 0x40
#define JOY_UP 0x80
#define BUTTON_OPTION1 0x08
#define BUTTON_OPTION2 0x04
#define BUTTON_INNER 0x02
#define BUTTON_OUTER 0x01

#define BUTTON_PAUSE 0x01


extern char clown[];
#asm

_SCB dc.b $c0,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
#endasm


extern char SCBoeil[];
extern char SCBball1[];
extern char SCBball2[];
extern char SCBball3[];
extern char SCBball4[];
extern char SCBball5[];

#asm
_SCBoeil dc.b $c7,$10,$20
dc.w _SCBball1,_oeil
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball1 dc.b $c7,$10,$20
dc.w _SCBball2,ball1
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball2 dc.b $c7,$10,$20
dc.w _SCBball3,ball2
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball3 dc.b $c7,$10,$20
dc.w _SCBball4,ball3
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball4 dc.b $c7,$10,$20
dc.w _SCBball3,ball4
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball5 dc.b $c7,$10,$20
dc.w 0,_ball5
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

#endasm



int x,y;
int i;

// assembler vertical retrace syncronisation routine
void Vsync()
{
#asm
vretrace:
lda $fd0a
bne vretrace
#endasm
}


/************************************************************************
** **
** **
**************************************************************************/
char main()
{
InitIRQ();
CLI;

SetBuffers(SCREEN, RENDER ,0);

/* set the palette */
SetSCB(pal);
DrawFBox(0, 0, 160, 102, 0);
SCBDATA(SCB) = 0;
SetRGB(pal);
DrawFBox(0,0,160,102,0);
SCBX(SCB) = 0;
SCBY(SCB) = 0;
SCBDATA(SCB) = clown;


for( ; ; )
{
DrawSprite(clown);
DrawSprite(SCBoeil);
Vsync();
SwapBuffers();
}

62

Il te manque :
- la déclaration de SCB en C (pour afficher le fond)
- la déclaration des objets sprites
- la dernère accolade (pour fermer la procédure main() )
- en plus, dans la définition de SCBball4, tu pointes vers _SCBball3 ou lieu du 5
- pour initialiser la palette, tu ustilisais SetSCB au lieu de SetRGB

Je te mets en rouge les lignes à ajouter/modifier.

Dis moi si ça va mieux là ?



#include <stdlib.h>
#include <lynx.h>
#include <lynxlib.h>
#include "inc\clown.pal"


#define SCREEN (MEMTOP-8160)
#define RENDER (MEMTOP-16320)


/* LYNX-specific #defines: */
#define JOY_RIGHT 0x10
#define JOY_LEFT 0x20
#define JOY_DOWN 0x40
#define JOY_UP 0x80
#define BUTTON_OPTION1 0x08
#define BUTTON_OPTION2 0x04
#define BUTTON_INNER 0x02
#define BUTTON_OUTER 0x01

#define BUTTON_PAUSE 0x01


extern char clown[];
extern char SCB[];
#asm

_SCB dc.b $c0,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
#endasm

// déclaration des objets sprites qui seront linkés
extern char oeil[];
extern char ball1[];
extern char ball2[];
extern char ball3[];
extern char ball4[];
extern char ball5[];

// déclaration des SCB pour ces sprites

extern char SCBoeil[];
extern char SCBball1[];
extern char SCBball2[];
extern char SCBball3[];
extern char SCBball4[];
extern char SCBball5[];

#asm
_SCBoeil dc.b $c7,$10,$20
dc.w _SCBball1,_oeil
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball1 dc.b $c7,$10,$20
dc.w _SCBball2,ball1
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball2 dc.b $c7,$10,$20
dc.w _SCBball3,ball2
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball3 dc.b $c7,$10,$20
dc.w _SCBball4,ball3
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball4 dc.b $c7,$10,$20
dc.w _SCBball5,ball4
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

_SCBball5 dc.b $c7,$10,$20
dc.w 0,_ball5
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

#endasm



int x,y;
int i;

// assembler vertical retrace syncronisation routine
void Vsync()
{
#asm
vretrace:
lda $fd0a
bne vretrace
#endasm
}


/************************************************************************
** **
** **
**************************************************************************/
char main()
{
InitIRQ();
CLI;

SetBuffers(SCREEN, RENDER ,0);

/* set the palette */
SetRGB(pal);
DrawFBox(0, 0, 160, 102, 0);
SCBDATA(SCB) = 0;
SetRGB(pal);
DrawFBox(0,0,160,102,0);
SCBX(SCB) = 0;
SCBY(SCB) = 0;
SCBDATA(SCB) = clown;


for( ; ; )
{
DrawSprite(SCB);
DrawSprite(SCBoeil);
Vsync();
SwapBuffers();
}
}

63

Maintenant j'ai une multitude d'erreurs, test m.65:xxx:error:bogus line. . Mais etant donné que j'ai pas mal trifouillé les *.obj et *.pal je prefere attendre ce soir et repartir de zero afin d'étre sur des fichiers que j'utilise soit bon.

64

Bon bien meme en reprenant tout a zéro je me retrouve toujours avec ses erreur "bogus line".

Sauriez vous me dire d'ou cela peut venir?

65

De mémoire non, mais c'est une erruer que j'ai déjà eu.
Première chose, tu ne dois pas avoir d'espace au début de tes lignes assembleurs comprises entre #asm et #endasm

Si tu mets ton archive à dispo, je compilerais et essaierais de trouver le problème.

66

Petit H.S. :

D'abord bravo a Fadest pour livrer gratuitement une partie de ces codes, algo etc..

Ensuite rebravo a Fadest et Vince pour leur 'cours' de code en direct, en esperant que d'autres que Rygar vont suivre le mouvement.


Une seule chose les amis, si l'entre d'entre vous profite des fichiers, aides de Fadest et Vince, quand votre projet sera publié penser juste a faire un greetings a ces personnes, on a plus de respect pour une personne qui essaie de produire quelque chose meme si il est aidé qu'une personne qui fait du rip. Mais je penses qu'ici les personnes ne sont pas comme ca wink

Fin du H.S.

GT en traind d'applaudir Fadest Vince et Rygar (Qui se lance wink )

P.S : S'il vous plait pour eviter un troll, veuillez ne pas repondre a cela, ca serait vraiment nul de faire devier ce sujet merci
avatar< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

67

Je me suis pas mal disperser du coup je rame sur tous et cela m'énerve!
Je vais essayer de finir une chose avant d'en commencer une autre.


Mon idée est de faire une cartouche contenant toute les demos que j'ai fais.
Le souci c'est qu'un .O ne peut exceder 40ko.
Ce dont j'aurais besoin c'est :
1 un programme qui me permette de faire un menu afin de ne charger que la demo que je veux regarder.
2 un programme qui me crée un .lnx de 256ko ce qui me permetrais apres de faire graver cette rom sur PCB.


(encore deux petites questions que je ne devrais pas poser car je brule encore mes etapes mais bon je les pose quand meme:
1/ je n'arrive pas a inserer un compteur (j'ai essayer de taper la fonction "long compteur" mais cela ne marche pas)
2/ j'ai crée une image de plus 160*550, pour me deplacer dedant je l'ai gerer comme un sprit et je la fait bouger=>
-Est-ce la meilleur methode?
-Comment zoomer sur un point de l'images?
-Comment instorer une limite de déplacement possible (ne pas depacer X500 ou X-100 par exemple)?
-Mon but est de créer l'illusion que l'on regarde autour de soit en déplacent l'image mais pour bien faire il faudrait qu'une fois arriver a la fin de l'image, une nouvelle copie de cette image apparaisse et suive la premiere (un peut comme si on faisait un cercle avec une photo. Si les bors sont bien superposés cela doit marcher) Y a t'il un moyen simple pour réaliser cela?



68

Pour le menu/création de lnx, je vais te préparer un tutorial.
Attention, le menu principal (type Yastuna 1 ou 2) est en assembleur, mais ça devrait le faire.
Tu peux aussi rechercher le topic sur comment créer son propre insert.o (pour remplacer le logo Atari au boot avant l'apparition du premier programme)


Jusqu'à combien veux tu que ton compteur monte. Il n'y a pas d elong dans le compilo de mémoire (donc 16300 et des brouettes maxi)

Pour bouger un fond, il y a plusieurs méthodes :
- bouger le sprite comme tu la fais
- le laisser fixe et déplacer l'affichage virtuel de l'écran, attention, en cas de sprites à l'écran, il faut tenir compte de ce décalage

Pour zoomer sur un point de l'image ?
Il faut que ce point soit un sprite indépendant et utiliser le facteur de zoom du descripteur de sprite

Pour le dernier point, et tous les détails techniques, je te donne ça dès que j'ai ma doc sous la main.

69

J'aurais besoin d'un petit coup de mains (un de plus):

j'ai un sprite qui va de gauche à droite de l'ecran boucler à l'infini là pas de probléme,
j'ai un autre sprite qui va de haut en bas de l'ecran boucler à l'infini là non plus pas de probléme,
ce que j'aimerais c'est que lorsque l'on lance la rom le spite n°1 démarre (là non plus pas de pb), puis lorsque l'on appuis sur A on bascule sur l'autre sprite et que l'on reste sur ce sprite tant que l'on ne relache pas A.

J'ai fait pas mal de tentative et je n'en suis pas loin mais j'ai du mal à placer correctement les crochets vis a vis des fonction "for" ce qui fait que j'arrive a passer de l'un à l'autre mais ils s'arretent au bout d'un allez..


voila en gros ou j'en suis:

for(;wink
{
sprite 1... de haut en bas
}


while(!joystick);
if(joystick);

for(;wink
{
sprite 2... de à droite
}

Mais bien évidement cela ne marche pas.




70

(on suppose que j'ai bien compris l'effet voulu)

le plus "simple" à faire :

while(){
for (;wink{
if(joystick) break;
sprite 1...
}

for (;wink{
if(!joystick) break;
sprite 2...
}
}
qui a pour effet (à l'infini, c'est le "while()") de lancer la boucle du premier sprite, si jamais on appuie sur une touche ("if(joystick)") alors on sort de cette boucle ("break") et on passe à celle du second sprite et là c'est l'inverse, pour sortir faut lacher (le point d'exclamation, c'est pour faire un NON logique sur la condition, ça revient à écrire "if (joystick == 0) break;") et à ce moment on reboucle (l'accolade fermante du while) pour recommencer sur le premier sprite, jusqu'à ce qu'on appuie à nouveau sur une touche...
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

71

[edit] rien, j'ai pigé pourquoi en fait
avatarZeroblog

« 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

72


Que dire de plus: top merci vince!

73

Je desespere d'arrivé a faire tourner un sprite je ne sais pas qu'elle fonction utiliser ni comment l'ecrire.
qqun aurais't'il une petite idée et surtout un petit bout de code en exemple.

74

Tourner ?
Faire une rotation tu veux dire ?

A moins que je ne sois passé à coté, la Lynx n'a pas de rotation hard (contrairement à la Jag, faut bien qu'elle ait quelque chose de plus que sa petite soeur grin).
Le plus simple, c'est encore d'avoir plusieurs sprites (un pour chaque position).
Toutefois (si graphiquement ça colle, pas d'effets de lumière sur ton sprite par exemple), tu peux ruser avec les fonctions miroir, ainsi, pour une rotation à 8 position (haut, haut/droit, droit, bas/doit, bas, bas/gauche, gauche, haut/gauche), tu n'as en fait besoin que de 3 sprites (haut, haut/droit et droit par exemple), les 5 autres étant une combinaison d'un de ces sprites et d'un miroir vertical et/ou horizontal (par exemple haut/gauche sera le miroir vertical de haut/droit,...)

Mais bon, je ne sais pas si c'était ça ton problème wink

75

Il n'existe pas de fonction matérielle pour la rotation.
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

76

C'est dingue qu'il n'y est pas de fonction rotation quand même!
En gros je peux déplacer un sprite de gauche a droite et de haut en bas je peux le zoomer, le retourner.... mais pas le faire tourner!

Je voulais faire tourner une elipse de la maniere la plus fluide possible et ca va bouffer une place folle de faire tout ça en sprites...
Dommage.

-A quoi servent les fonctions sin et cos que je vois parfois dans certaine sources?

77

à calculer des sinus et des cosinus hehe

si tu te souviens de tes cours de maths et des rotations de matrices, tu peux implémenter toi même une fonction de rotation... mais attention ça prends de la place à coder, ça demande de la ram et de la puissance de calcul
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

78

Je continue dans les questions, cette fois je voudrais arriver à gérer la colision des sprites. Je pense que cela ce gère aux niveaux des
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
qui traine sous la déf des sprites mais mes essais n'ont pas été trés concluants

Ce que j'essai de faire c'est de faire rebondir une balle sur une raquette si quelqu'un avait un petit bout de code en exemple ça serait super aprés je pourais me débrouiller pour avancer un peu plus.

79

dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef

Ca, c'est pour la gestion de la palette du sprite, c'est une table de correspondance entre les 16 couleurs du sprite (la position dans la chaine) et la couleur dans la palette système définie.
Si tu laisses la chaine telle quelle, ton sprite aura la même palette que la Lynx.
Mais par exemple, si tu remplaces la valeur 1 (qui serait pour l'exemple du rouge dans ta palette système) par 4 (qui serait du vert...), tout les éléments rouges de ton sprite seront verts. Si tu es défini avec transparence pour le sprite, c'est la valeur 0 qui indique quelle couleur sera transparente. Bien sur, tu peux avoir plusieurs fois le même indice (par exemple, avant que Tempi ne me fasse un sprite spécial pour le bouclier dans Space Shoot, je définissais tout le sprite en transparent sauf le contour, ça faisait un effet moins beau, mais suffisant pour montrer qu'on avait activé quelque chose).

Pour revenir aux collisions, c'est un peu plus complexe que ça, il faut tout d'abord définir un buffer spécial de collision (soit réserver 8192 pour ça) de la même manière que les écrans physiques et logiques. Puis au niveau de la déclaration de tes sprites dire qu'il faut gérer la collision pour ceux là (et leur accorder un numéro je crois). Ensuite après affichage, il faut tester tes sprites pour vérifier si l'indicateur 'collision' est activé.
J'avais fait quelques tests, mais je ne sais pas si je les ai encore. Je n'avais pas utilisé la collision dans Shoot ou tn (malgré quie j'aurais bien aimé) pour 2 raisons :
- ça bouffe 8ko de plus (ça laisse à peine plus de 30 ko au final et j'étais vraiment trop juste)
- la gestion de collision ne marchait pas sur mes listes de prites chainés, et je ne pouvais pas me passer de chainer mes sprites (ça ramerait trop).

Pour ton exemple, la 2° raison ne compte pas, je vais voir si je retrouve tes docs ou mon exemple.

80

Fadest (./74) :
Tourner ?
Faire une rotation tu veux dire ?

A moins que je ne sois passé à coté, la Lynx n'a pas de rotation hard (contrairement à la Jag, faut bien qu'elle ait quelque chose de plus que sa petite soeur grin).


Petit H.S.

Hum hum, la rotation hard, pas tout a fait, en hard si on veut, car on peut le faire que sur des blocs au blitter.

Fin H.S.

GT rabbit
avatar< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

81

J'ai jamais trouvé le rapport intérêt de la feature / mémoire consommée suffisant pour utiliser les collisions hardwares mais j'avais commencé l'un des exemples de Matthias Domin : source.php?s=589
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

82

Je pouvais donc toujours m'acharner sur les paramétres sous les sprites.... au mieux j'aurais changé leurs couleurs!

J'ai vu les exemples de MD mais à part le premier et le deuxiéme je n'ai pas vraiment reussi à m'en faire des tutos d'apprentissage.

D'apres tes explications fadest cela n'a pas l'air simple, moi j'étais partie sur l'idée toute béte de dire par exemple si xraquette et y raquette = x balle et y-1 balle alors on change la dir de balle.

83

La gestion hard des collisions n'est pas triviale à mettre en place (mais pas hyper complexe non plus). Ensuite, elle aura ses avantages et inconvénients.

Avantages :
géré par le système
géré au pixel près quelque soit la forme des sprites
Nickel pour un shoot (si collision balle - vaisseau -> destruction)

Inconvénients :
ralentit un peu la Lynx (bon, d'un autre coté, la gestion à la main sera aussi du temps machine consommé)
concomme de la mémoire (8 ko)
moyen quand on doit savoir ou a eu lieu la collision (exemple casse-brique, en plus de savoir qu'il y a eu collision entre la balle et la raquette, il faut savoir si c'est à droite ou à gauche de la raquette pour les effets, voire au dessus ou en dessous)


Pour ton exemple, on va considérer que la balle est un point et la raquette un rectangle, il faudrait plutôt tester quelque chose du genre :
Si xBalle>xRaquette et xBalle <xRaquette + largeurRaquette
Si yBalle >yRaquette et yBalle<yRaquette + hauteurRaquette
-> changement direction balle
FinSi
FinSi

A adapter bien sur (surtout si la balle est assez grosse), car je pars du principe que le point d'action de ton sprite est au centre en bas de ta balle (j'ai un doute, j'ai déjà parlé du point d'action d'un sprite ?).

84

J'ai reussi à écrire un petit code pour l'histoire de la balle et de la raquette ça marche assez bien même si à mon avis la méthode n'est pas la meilleure car elle deviendrais bien vite compliquée si d'aventure je voulais gérer la collision de plusieurs sprites entre eux.

Cela dit ça marche et pour le moment ça va suffir à m'occuper.


Prochaine étape le son!

J'ai bien étudié le tuto "sonorisez votre lynx" de fadest mais je galére un peu, j'ai un logiciel qui me permet d'obtenir un .wav 8 bits mono 8khz mais ensuite inpossible de le convertir.

Question, ou dois je copier les programmes wav2lsf et bin2c?
Je les avais copié directement à la racine de mon dd ensuite je tapais dans ma fenetre dos "wav2lsf test.wav -o test.lsf" mais la il m'affiche un message du type : SYSTEM\CurrentControlSet\Control\VirtualDeviceDrivers. Le format du pilote de péripherique virtuel dans le registre n'est pas valide.

Fadest si tu pouvais me réexpliquer la marche à suivre comme tu l'avais si bien fais pour les images.

Ou si quelqu'un d'autre à une idée pour un résultat similaire...



85

RYGAR (./84) :
Prochaine étape le son!

J'ai bien étudié le tuto "sonorisez votre lynx" de fadest


Fadest qui donne des cours de musique lol

2008 on est pas a l'abri de bonnes blagues boing


GT dehors
avatar< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

86

Oulah, c'est vieux ce truc là.
Et ce n'est pas forcément la meilleure solution, car ça se basait sur des bruitages digits (et donc bouffait beaucoup de mémoire)
Le mieux je pense, ce serait d'utiliser ABCMusic, qui peut permettre de jouer des musiques, mais aussi en setupant bien l'instrument de faire des bruitages.
Je crois que Cooper avait pas mal creusé l'étude des parametres pour trouver lesquelks correspondaient à quel instrument.
Et il avait commencé à regarder pour faire un mod2ABC je crois aussi.

De mon coté, j'avais traduit un article écrit par Karri pour Revival à l'époque sur ABCMusic :

La librairie ABCMusic

Interlude musical pour cette initialisation à la programmation Lynx avec la présentation de la librairie ABCMusic.
ABCMusic est une librairie destinée à jouer de la musique simplement avec le kit BLL. Son auteur, Karri Kaksonnen, est finlandais et a bien voulu nous écrire un petit article expliquant comment utiliser sa librairie.

Utiliser ABCMusic par Karri Kaksonnen (traduit par Fadest)

J’ai créé un programme minimal.c qui utilise ma librairie abcmusic.m65. Il montre comment inclure des musiques sur 4 voies dans vos programmes en C en utilisant le module abcmusic.m65.


Voici la référence des commandes pour ABCMusic :
Contrôle des instruments :
On - octave n=0..6
Xn - XOR taps n=0..511
In - intergate n=0..1
Vn - volume n=0..127
Tn - durée n=0..255
Rn - Ramp (attack) n=0..127
Hn - Hold n=0..255
Kn - Kill (decay) n=0..127

Structure d’une piste
|: - début de section
: - repeat

Notes
CDEFGABcdefgabz - notes (z = silent)
Cn – joue la note C pour la durée n=2..4

Les espaces sont ignorés, Les codes d’instruments peut apparaître n’importe ou dans la chaîne de la musique. Donc, il est possible de changer d’instrument en cours de restitution.

Une musique est définie comme une chaîne ASCII :

char tune[]="O1 X7 I0 V66 T33 R60 H2 K3 |:CDEEDEFFEFGEFDGG:"

La musique est jouée par la commande abcmusic() qui reçoit en paramètre la voie ( de 0 à 3) et la musique.
Par exemple, la musique définit par tune[] sera jouée sur la voie 0 :
abcmusic(0, tune);


et un exemple de code donné par Karri :
/*
 * minimal.c by Karri Kaksonen
 *
 * This is a minimal application showing how abcmusic works in
 * for the Atari Lynx in C.
 */
#include <lynx.h>
#include <lynxlib.h>
#include <stdlib.h>

/* Routines defined in abcmusic.m65 */
extern void silence();
extern void abcmusic();
extern void update_music();

extern char abcmusic0[];
extern char abcmusic1[];
extern char abcmusic2[];
extern char abcmusic3[];

#asm
          xref _abcmusic0
          xref _abcmusic1
          xref _abcmusic2
          xref _abcmusic3

_abcmusic0  
            dc.b "O1X7I0V45T20R40H2K3" 
            dc.b "|:CDEEDEFFEFGEFDGG"
            dc.b "I1CDEEDEFFEFGEFDCC"
            dc.b "I0cBAABAGGAGFFEDEE"
            dc.b "cBAABAGGAGFFEDCC"
            dc.b "ECDDFDEEGEFGABcc"
            dc.b "ECDDFDEEGEFGABcc"
            dc.b "CDEEDEFFEFGEFDGG"
            dc.b "CDEEDEFFEFGEFDCC:"
            dc.b 0

_abcmusic1  
            dc.b "O2X7I0V45T20R80H8K1" 
            dc.b "|:C4D4E4F4"
            dc.b "C4D4E4F4"
            dc.b "c4B4A4E4"
            dc.b "c4B4A4E4"
            dc.b "E4F4G4A4"
            dc.b "E4F4G4A4"
            dc.b "C4D4E4F4"
            dc.b "C4D4E4F4:"
            dc.b 0

_abcmusic2  
            dc.b "O1X7I0V45T20R40H2K3" 
            dc.b "zzzzzzzz"
            dc.b "|:CDEEDEFFEFGEFDGG"
            dc.b "I1CDEEDEFFEFGEFDCC"
            dc.b "I0cBAABAGGAGFFEDEE"
            dc.b "cBAABAGGAGFFEDCC"
            dc.b "ECDDFDEEGEFGABcc"
            dc.b "ECDDFDEEGEFGABcc"
            dc.b "CDEEDEFFEFGEFDGG"
            dc.b "CDEEDEFFEFGEFDCC:"
            dc.b 0

_abcmusic3  
            dc.b "O2X7I0V45T20R80H8K1" 
            dc.b "z4z4z2"
            dc.b "|:C4D4E4F4"
            dc.b "C4D4E4F4"
            dc.b "c4B4A4E4"
            dc.b "c4B4A4E4"
            dc.b "E4F4G4A4"
            dc.b "E4F4G4A4"
            dc.b "C4D4E4F4"
            dc.b "C4D4E4F4:"
            dc.b 0

#endasm

uchar SCREEN1[8160]       at (0xfff8-2*8160); // screen 1
uchar SCREEN2[8160]       at (0xfff8-1*8160); // screen 2

char pal[]={
	0x00,0x00,0x01,0x05,0x08,0x0b,0x0e,0x00,0x02,0x00,0x03,0x07,0x0a,0x0d,0x0f,0x00,
	0x00,0xd0,0x11,0x55,0x88,0xbb,0xee,0x0d,0x22,0xf0,0x33,0x77,0xaa,0xdd,0xff,0x0f};
 
/*
  Using drawPending and swapping buffers in the interrupt
  creates a flicker-free display. Idea borrowed from Tom Schenks.
*/
char drawPending;

VBL() interrupt
{
    if (drawPending) {
        SwapBuffers();
        drawPending = 0;
    }
    update_music();
}

int main()
{
    InitIRQ();
    CLI;
    SetBuffers(SCREEN1, SCREEN2, 0);
    _SetRGB(pal);
    InstallIRQ(2,VBL);
    EnableIRQ(2);
    silence();
    abcmusic(0,abcmusic0);
    abcmusic(1,abcmusic1);
    abcmusic(2,abcmusic2);
    abcmusic(3,abcmusic3);
    while (1) ;
}



Il te manquera la librairie abcmusic.obj.
Je n'ai qu'une vieille version qui devrait faire l'affaire :
http://fadest.free.fr/DevLynx/ABCMUSIC.OBJ

Tu copies dans le répertoire OBJ de ton sous-projet, tu modifies Makelibr.bat pour que ce soit inclus dans ta librairie.



Et puis de toutes manières, vu la taille d'un lecteur MP3 et le confort que ça apporte (qualité du son + choix de sa musique préférée), je suis MP3 compliant maintenant gni

@GT : bah ouais, étonnant n'est ce pas. D'un autre coté, il parait que GT a déjà fait un jeu eek wink

87

Excellent Fadest comme d'habitude. Merci!

Dés ce week end je teste ça.

88

Fadest (./86) :
Et puis de toutes manières, vu la taille d'un lecteur MP3 et le confort que ça apporte (qualité du son + choix de sa musique préférée), je suis MP3 compliant maintenant gni

@GT : bah ouais, étonnant n'est ce pas. D'un autre coté, il parait que GT a déjà fait un jeu eek wink


Oui il s'appelle Tiles Osmosis et est dispo sur le site Cerebral Vortex, cliquez ici wink

Tu as eu de la chance que Marcer avait quelques petits soucis de maison, car cela nous a empecher de mettre le MP2 dans Videl Visions, car je t'aurais fait une mega dedicace wink

GT Taquin boing

avatar< SCPCD > j'aurais du dire "les doigts dans le cul vu que le java c'est de la merde"
Je suis Goto !

89

gni
Bah, vu que tu marches à l'égo et au fouet.
Je me charges de titiller ton égo, et Kuk s'occupe du fouet grin

90

#trifesses#trifouet
avatarWebmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca