Plugins type 2 : plusieurs types de canvas
- MonCanvasClassique :
le sprite ne fait que s'animer, il ne se deplace pas
- MonCanvasOrtho :
le sprite se deplace style "casse-brique"
- MonCanvasRandom :
le sprite se deplace n'importe comment
- MonCanvasLabyrinthe :
le sprite se deplace en allant le plus loin possible dans la direction qu'il a choisi, entre les murs.
nan, en fait c'est pas vrai, j'ai essaye, mais j'ai pas reussi.
Au debut (5 a 10 secondes) l'animation sera lente, puis elle est tres fluide des que tout le vecteur est charge.
C'est donc le canvas qui va diriger le sprite , cela tombe bien, c'est lui qui
connait toutes les donnees : le bsp (eventuellement) , la position des murs
(soit la taille de l'image de fond), et la position des eventuels ennemis.
Que se passe t'il?
Et bien, la marmotte... nan, le canvas "intelligent" met le sprite ( mais ca
c'est parce qu'on ne lui en a donne qu'un) et le fond (pareil) en sont centre,
et apres avoir verifie l'existence du sprite, il le deplace.
Il calcule toujours la position suivante, comme ca en cas de collision, on a
le temps de voir venir.
Il n'envoie pas la position, il envoie les possibilites de position
-> dans le decor.
-> dans l'ennemi.
-> dans la zone authorisee.
Et en fonction de la collision future, et de son type, il reoriente l'objet.
la GUI qui va avec l'API
Pour aider à implementer et utiliser cette API, une GUI, truffee d'Observers et d'Observables, a été créée :
bien sur, sauf si on depasse la taille de l'ecran, toute image est utilisable.
Mode d'emploi de la GUI
- allez chercher prog.tgz dans le repertoire download
- decompactez
- allez dans le repertoire Programme
- tapez make
- tapez ./go
- choisissez un canvas
- changez le fond
- chargez un sprite
- pressez le bouton play
- pressez le bouton pause
- pressez le bouton pause encore
- pressez le bouton stop
- pressez le bouton vert du haut pour charger un nouveau canvas.
- pressez le bouton jaune du haut pour effecer l'image de l'animation
courante.
- chargez une sequence...
- ...etc...
Ne vous inquieter pas, il y a des Tooltips !
Et si c'est trop angoissant, renommez le repertoire
Images/Icones ...
... les noms
des boutons apparaitrons a la place des images
- boutons du haut (de gauche a droite)
bouton rouge = quitter
bouton jaune 1 = save
bouton jaune 2 = load
bouton vert = ajouter
- boutons de gauche (de haut en bas)
bouton bleu clair = loader une nouvelle image de fond
bouton rose = loader un nouveau gif anime
bouton bleu = loader une nouvelle sequence
bouton mauve = loader un nouveau sprite
- .... autres pluginsImport
- boutons de dessous le canvas : les commandes de defilement (de gauche a droite)
- passer au precedent
- passer au suivant
- pause
- play / stop selon les cas
- le bouton pres du label : declenche une image de presentation
- les Scrollbars de haut en bas :
- changer d'image de fond parmi les images disponibles....
- changer de gif ...
- changer de sequence ...
- changer de sprite ...
- .... autres pluginsImport
Ce que j'aurais pu faire...et que je n'ai pas fait
Il faudrait encore 2 ou 3 trucs (qu'on devrait pouvoir faire en plugins), comme :
la verification des types d'images loadees par securite (en cas de
gif anime pour ne pas essayer d'extraire des frames qui n'existent pas)
l'implementation de bsp autres que
rectangulaires avec des affine Transform sur les boundings internes des
rectangles.
des canvas avec plusieurs ennemis
des canvas avec des maps de base
et une petite chose que j'ai neglige, un reglage de vitesse des sprites ( un frame rate uniforme)
et une deuxieme petite chose : passer en AWT pour accelerer, parce que je suis vilaine et n'ai pas ecoute mon professeur,pour pouvoir verifier moi-même.
et une troisieme petite chose, carger des bsps et changer les lignes en rectangles dans les bsp, pour figurer des murs pleins
en gros, les bounding box sont de petites boites des claustras pour ceux qui
ont des lettres, qui decoupent une zone, en plusieurs zones plus petites.
Ils servent a reperer un objet dans l'espace divise, en un temps
algorithmiquement correct.
On peut ainsi associer un evenement a chaque valeur de retour d'un parcours de
bsp, et gerer ainsi les collisions, et les bonus, etc....
en fait c'est une technique de partitionnement de l'espace.
Ici le type est assez simple, ne gere que des rectangles separes par des
lignes, mais reste quand meme manipulable sans grande difficulte.
il constitue l'essentiel des maps, et permet de sauver les maps, parce qu'il
est facilement serialisable.
un petit dessin simple pour illustrer :
On voit : 1 - que l'ordre d'entree des lignes importe
2 - que chaque ligne decoupe le rectangle en - au moins - 2 parties
des maps de bases existent : spirale, carre, croix... les autres seront creee
de maniere aleatoire, c'est plus simple pour la gui....(mea culpa) ...donc
quand on en tient une belle, vaut mieux la sauver...
Bref Tutorial : Comment creer un jeu
Je n'ai malheureusement pas le droit de le reveler....
Le jeu
Je ne l'ai pas fait..
Mea culpa
Je ne l'ai pas essaye sous windows, et je l'ai developpe sous Linux
download
javadoc