Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : AmigaBasic - animation et son (déplacement d'objets à l'écran)
(Article écrit par Christian Sager et extrait d'A-News (Amiga News) - avril 1990)
|
|
Il faut avouer que programmer des jeux de simulation en BASIC n'est pas l'idéal. Toutefois, il ne faut pas
désespérer. Avec un peu de fantaisie vous pourrez réussir à mettre en pratique vos idées. Pour ce faire,
je vais introduire les commandes de son et d'animation.
Dans la partie précédente, je vous avais parlé de commandes graphiques.
Cette fois-ci, je parle d'animation, c'est-à-dire, le déplacement d'objets graphiques sur votre écran.
Comme le mouvement s'accompagne généralement de bruit, je vous parlerai aussi des commandes du son.
Pour commencer correctement et mettre en application immédiatement vos nouvelles connaissances, je vous conseille
d'apprendre à connaître l'éditeur d'objet ObjEdit. Les explications, vous les trouverez dans le chapitre 7 de votre
livre de l'AmigaBasic où son utilisation est bien expliquée. Je vous livre néanmoins une courte explication
pour mémoire.
Après l'appel de l'éditeur, vous devez choisir entre l'édition de sprites ou de BOB et vous choisissez la taille de
l'objet. Si vous ne connaissez pas encore la différence entre BOB et sprites, relisez la section correspondante
dans votre livre de l'AmigaBasic (qu'un livre serve enfin à autre chose qu'à la garniture !).
Arrivons enfin à quelque chose de pratique. Sur votre disque il y a un tiroir nommé "BasicDemos".
Vous y trouverez un fichier du nom de "Ball". Le programme suivant :
OPEN "ExtrasD:BasicDemos/Ball" FOR INPUT AS 1
OBJECT.SHAPE 1,INPUT$(LOF(1),1)
|
...va vous permettre de l'ouvrir sous le numéro 1. Bien évidemment vous pouvez donner une chaîne...
OBJECT.SHAPE Numéro, Chaîne
|
...pour définir votre objet. Avant de l'afficher à l'écran, il faut encore définir sa position avec les commandes :
OBJECT.x Numéro,Position-X
OBJECT.y Numéro,Position-Y
|
Vous placez ainsi l'objet à partir du coin haut gauche vers la droite puis vers le bas. Et avec :
...votre objet va apparaître à l'écran. Mais l'intérêt va augmenter grâce à l'animation en utilisant :
OBJECT,VX Numéro,Vitesse-X
OBJECT,VY Numéro,Vitesse-Y
|
...vous déterminez ainsi la vitesse de déplacement par seconde. Une valeur positive pour "Vitesse-X" déplace
l'objet de gauche à droite, la valeur négative à l'inverse. Une valeur négative pour "Vitesse-Y"
déplace de haut en bas et inversement. Pour donner le mouvement vous devez ajouter :
...qui peut être arrête par :
Pour connaître la position, vous utilisez :
OBJECT.X (Numéro)
OBJECT.Y (Numéro)
|
Ainsi que pour la vitesse :
OBJECT.VX (Numéro)
OBJECT.VY (Numéro)
|
Votre objet a sa vie propre et s'il cogne contre un bord de l'écran, il reste comme collé.
Vous ne lui avez pas dit ce qu'il doit faire. En BASIC, vous utilisez :
...où "Fait" représente un saut à un sous-programme qui dit ce qui se passe en cas de collision.
Au préalable, vous devez activer cette possibilité par :
Dans mon cas, l'objet ne peut que réagir contre les bords de l'écran mais avec "COLLISION(0)"
vous repérez l'objet qui a touché ou était touché en dernier. Vous reprenez cette
fonction en plaçant le numéro donné précédemment et vous obtiendrez le numéro de celui qui a
effectué la collision. Si cette valeur était négative, il s'agit du bord haut (-1),
gauche (-2), bas (-3), droite (-4) de votre fenêtre.
Le listing 1 vous donne une version améliorée du programme que vous avez dans votre livre sous
OBJECT.SHAPE qui, de plus, est bogué. L'erreur du programme ? Vous pouvez la trouver facilement.
Recopiez-le et laissez le tourner pendant un certain temps... la balle quittera votre fenêtre
à un certain moment ! La différence réside dans le fait que je teste toutes les possibilités
de collision et que je remets la balle sur le bon chemin avec la fonction ABS.
Avec ce programme, vous chargez le fichier "Ball" de votre disque dur
La raison de cette erreur se situe peut-être dans l'interpréteur lui-même. Qui peut me le dire ?
En fait, si nous activons le programme initial du livre et si la balle tape dans le coin à gauche,
cela oblige à un double test pour le programme et une perte de temps car la balle touche le bord
pour sa troisième collision. Il y a réaction et hop, la balle continue et sort de l'écran !
Je viens de répondre à ma question. C'est la lenteur de l'interpréteur qui en est la cause.
Et cette erreur pour un seul objet ! Pendant que vous gérez un objet les autres entrent en collision.
Résultat, les 16 collisions permises sont vite dépassées et l'Amiga ne pouvant les gérer, ils disparaissent
de l'écran. La petite astuce est donnée dans le listing 2. En même temps que le test de collision sur l'objet,
je teste les autres collisions. En incluant la boucle "FOR... NEXT" et en mettant un "beep", vous pouvez contrôler
l'effet.
Meilleure manière de tester les collisions
Attention : il y a une erreur dans ce listing. C'est le coup de la ligne sautée et intervertie. Donc à partir
de "CLOSE 1", écrivez :
OBJECT,SHAPE 1,style$
FOR a=1 TO nombre
OBJECT.SHAPE a,1
|
Après un court moment, le beep se transforme en son continu et vous indique que l'AmigaBasic a perdu les pédales !
Il ne peut plus gérer les collisions ! La prochaine fois je vous ajouterai le son. Alors à pluche...
|