Forums Casio - Autres questions

Index du Forum | Autres questions | Projet avec super drawstat...
Exagyde
Hors ligne
Membre
Niveau: Intermédiaire
Points: 86
Défis: 0
Message
Posté le 27/09/2016 18:20

Projet avec super drawstat... :

Bonjour,
Voilà déjà 1an que je programme sur Casio et je décide aujourd'hui de m'attaquer au mode graphique. Le seul problème c'est que je n'ai aucune idée de comment créer un moteur de déplacement en drawstat.
HELP me !!!



Pages: 1, 2 | Suivante

Zezombye
Hors ligne
Membre
Niveau: Confirmé
Points: 740
Défis: 9
Message
Citer : Posté le 27/09/2016 18:31 | #
Je t'invite à lire le tutoriel sur le multi drawstat, plus rapide que le drawstat normal : http://www.planet-casio.com/Fr/forums/topic14097-1-Tutoriel-Le-Multi-DrawStat.html

Ensuite pour faire un moteur de déplacement ben suffit d'avoir deux variables A et B (utilise pas X et Y, c'est déconseillé dans les fonctions graphiques) que tu incrémentes ou décrémentes suivant la flèche pressée.
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Ninestars
Hors ligne
Membre
Niveau: Confirmé
Points: 1814
Défis: 22
Message
Citer : Posté le 27/09/2016 19:17 | #
Regarde d'abord le Super DrawStat plutôt. Pour un moteur de déplacement, il suffit d'afficher san arrêt une image à certaines coordonnées (il ne faut pas utiliser les variables X et Y, Zezombye à raison) et de modifier ces coordonnées quand tu appuies sur des touches. En toute logique ton image va se déplacer. Voilà dans les grandes lignes
----------------------------------
Exagyde
Hors ligne
Membre
Niveau: Intermédiaire
Points: 86
Défis: 0
Message
Citer : Posté le 27/09/2016 19:59 | #
Ok merci pour vos réponses
Totoyo
Hors ligne
Membre d'honneur
Niveau: Vétéran
Points: 15782
Défis: 94
Message
Citer : Posté le 28/09/2016 11:19 | #
J'avais également réalisé deux vidéos tutoriels sur les bases d'un moteur de déplacements :
- en mode texte
- en mode graphique

Par contre, je n'aborde pas le DrawStat dans le mode graphique. En espérant néanmoins que les réponses apportées t'aideront dans ton projet
----------------------------------
Exagyde
Hors ligne
Membre
Niveau: Intermédiaire
Points: 86
Défis: 0
Message
Citer : Posté le 16/07/2017 19:49 | #
Mise à jour :
Bonsoir,
pour la création de mon petit jeu, j'utilise le super drawstat afin d'afficher le sprite du joueur et PNJ.
Mais mes 2 problèmes sont :
-Mon sprite est confondu avec le background, donc y a-t-il un moyen d'éteindre les pixels à l'intérieur du sprite ?
-Je sais que le super drawstat est rapide, mais niveau moteur de déplacement, je galère un peu. J'ai géré ma fenêtre pour faire en sorte qu'il y ai 4x7 cases de 16x16pixels chacune, donc j'agrémente et décrémente les listes (contenant les coordonnées de chaque pixels) de 16 à chaque. Le problème étant que l'image se redessine à chaque mouvement et le mécanisme de déplacement et détection des touches est également aussi lent.
Merci d'avance pour vos réponses.
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10251
Défis: 130
Message
Citer : Posté le 16/07/2017 20:16 | #
Effacer les pixels blancs du personnage... non. À moins de le faire à coup de PxlOff, ce que je ne te souhaite pas.

Quand à la vitesse du programme, encore une fois, pas de magie. Il faut optimiser chaque ligne consciencieusement, ce qui est un travail long et pas toujours gratifiant. On atteint vite les limites du Basic ; encore que les programmeurs assez malins arrivent bien à les contourner pour obtenir des résultats bluffants (#Ne0tux). Un travail rigoureux est de mise pour ça.
----------------------------------
Watch me, as I build my empire with my own hands.
Zezombye
Hors ligne
Membre
Niveau: Confirmé
Points: 740
Défis: 9
Message
Citer : Posté le 16/07/2017 20:17 | #
1: nope, la seule manière d'éteindre un pixel est avec PxlOff qui est assez lent (ou alors faut genre 5 pixels à éteindre). Une solution serait d'utiliser Text pour afficher des caractères qui simulent un sprite.
2: poste ton code, sinon on ne pourra pas t'aider
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Exagyde
Hors ligne
Membre
Niveau: Intermédiaire
Points: 86
Défis: 0
Message
Citer : Posté le 17/07/2017 11:26 | # | Fichier joint
Voici le dossier du projet, il contient le programme (utilisant la liste 1 et 2) et le background (PICT1).
Exagyde
Hors ligne
Membre
Niveau: Intermédiaire
Points: 86
Défis: 0
Message
Citer : Posté le 17/07/2017 12:34 | # | Fichier joint
Voila le .zip
Up
Exagyde
Hors ligne
Membre
Niveau: Intermédiaire
Points: 86
Défis: 0
Message
Citer : Posté le 21/07/2017 21:01 | # | Fichier joint
Bonsoir,
j'ai une erreur de dimension, savez-vous pourquoi ?
Merci d'avance
Hackcell
Hors ligne
Membre
Niveau: Intermédiaire
Points: 519
Défis: 4
Message
Citer : Posté le 21/07/2017 23:31 | #
Tu peux être un poil plus précis sur le contexte ?
Lancement, suite à une action, etc


----------------------------------
Why does the future looks so bright, while he only means death ??
Exagyde
Hors ligne
Membre
Niveau: Intermédiaire
Points: 86
Défis: 0
Message
Citer : Posté le 21/07/2017 23:33 | #
Problème au niveau de la génération du sprite.

Prog "~SPRITE"
ViewWindow 1,127,0,1,63,0,1,132,1
BG-None
S-WindMan
Do:Do:GetKey→G
G-Plot
Graph(X,Y)=(List 1[T],List 2[T])
LpWhile Not G
LpWhile G!=47
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10251
Défis: 130
Message
Citer : Posté le 22/07/2017 07:40 | #
Elle est marrante ta boucle, t'as deux conditions incluses l'une dans l'autre. (Not G ⇒ G = 0 ⇒ G ≠ 47)

T'as pas l'impression que « si Not G ou G≠47, je reviens au début de la boucle » se simplifie du coup ?
----------------------------------
Watch me, as I build my empire with my own hands.
Exagyde
Hors ligne
Membre
Niveau: Intermédiaire
Points: 86
Défis: 0
Message
Citer : Posté le 22/07/2017 11:42 | #
Erreur résolu : ViewWindow 1,127,0,1,63,0,1,45,1
Au lieu de ViewWindow 1,127,0,1,63,0,1,132,1

Ajouté le 27/07/2017 à 12:02 :
Bonjour,
mon projet avance bien pas à pas, mais me revoilà coincé : j'ai un problème avec les collisions. Pour commencer, sachant que l'écran a une taille de 63x127pixels, j'ai divisé cet écran en 6x12 cases de 10x10 pixels. Pour l'instant j'ai créé le sprite du joueur et généré un PNJ.
Pour la collision, ma première idée était de créer une matrice regroupant les coordonnées d'un point se trouvant au milieu de chaques cases :
-5→X:-5→Y:0→D
{72,2→Dim Mat M
Do:-5→X:Y+10→Y
Do:D+1→D:X+10→X
X→Mat M[D,1
Y→Mat M[D,2
LpWhile X≠115
LpWhile D≠72

Puis de dire au programme que les listes regroupant les coordonnées du sprite du joueur ne doivent pas renter en contact avec un point dans la matrice, exemple :
List 1[T]≠Mat M[57,1 And Mat M[57,2⇒List 1+10⇒List 1

Mais ça ne marche pas.

Ensuite j'avais testé en utilisant les coordonnées, les coordonnées du joueur ne doivent pas interféré avec celles du PNJ, ça ne fonctionne toujours pas.
Quel technique utilisez-vous ?
Merci d'avance
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10251
Défis: 130
Message
Citer : Posté le 27/07/2017 12:31 | #
La technique la plus commune consiste à représenter l'espace dans la matrice :
{6,12}→Dim Mat M

Ensuite, on place dans chaque case une valeur qui indique si la zone est accessible ou non, et parfois même le sprite qu'il faut y dessiner. Au moment de se déplacer, on calcule les coordonnées d'arrivée et on annule le mouvement si la case correspondante dans la matrice de l'espace est occupée.
----------------------------------
Watch me, as I build my empire with my own hands.
Exagyde
Hors ligne
Membre
Niveau: Intermédiaire
Points: 86
Défis: 0
Message
Citer : Posté le 27/07/2017 13:49 | #
6→X:1→Y:1→C
{6,12→Dim Mat M
Lbl 1:GetKey→G
C→Mat M[Y,X
G=27⇒X+1→X
G=28⇒Y-1→Y
G=38⇒X-1→X
G=37⇒Y+1→Y
X→V:Y→W
X=V Or Y=W⇒0→Mat M[W,V
Goto 1

Je sais que j'y suis presque mais qu'est-ce qui cloche ?
Lephenixnoir
Hors ligne
Administrateur
Niveau: Confirmé
Points: 10251
Défis: 130
Message
Citer : Posté le 27/07/2017 13:55 | #
T'as pas compris tout à fait le principe. La matrice M doit être préremplie avec les données de la map et surtout pas modifiée ensuite. Et tu dois tester ensuite la valeur à chaque déplacement, pour vérifier avant de te déplacer que tu ne rentres pas dans une case occupée.
----------------------------------
Watch me, as I build my empire with my own hands.
Ninestars
Hors ligne
Membre
Niveau: Confirmé
Points: 1814
Défis: 22
Message
Citer : Posté le 27/07/2017 14:02 | #
X→V:Y→W
X=V Or Y=W⇒0→Mat M[W,V

Il y a un problème ici en plus. Tu donnes la valeur de X et Y dans V et W. Donc X=V Or Y=W est inutile puisque toujours vrai
----------------------------------
Exagyde
Hors ligne
Membre
Niveau: Intermédiaire
Points: 86
Défis: 0
Message
Citer : Posté le 27/07/2017 19:54 | #
Je ne comprend pas quels données je doit mettre dans ma matrice. Les données de la map, ok, mais comment je doit procéder ?
Zezombye
Hors ligne
Membre
Niveau: Confirmé
Points: 740
Défis: 9
Message
Citer : Posté le 27/07/2017 20:08 | #
Tu définis un nombre pour chaque cas, par exemple 0 = vide, 1 = mur simple, 2 = pnj, 3 = case où est le joueur.
Dans ce cas, quand tu déplaces le sprite, il te suffit de regarder si le point de la matrice est à 0, si ce n'est pas le cas tu ne déplaces pas le joueur.
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE

Pages: 1, 2 | Suivante

Index du Forum | Autres questions | Projet avec super drawstat...
Publicité et partenaires
Casio Education
Casio éducation

TI-Planet
Casiopeia
Casiopeia
CasioFan, la communauté ClassPad
CasioFan
CodeWalrus
CodeWalrus

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2017 | Il y a 46 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Rugby Manager | Jeu de basket | Jeu de handball | Jeu de tennis | Nova Raider | Réparation téléphone | Soccer Rush | Tasty Tale

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd