Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Projet avec super drawstat...
Exagyde Hors ligne Membre Points: 86 Défis: 0 Message

Projet avec super drawstat...

Posté le 27/09/2016 18:20

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 !!!


1, 2 Suivante
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 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 Points: 2461 Défis: 24 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 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 Points: 16093 Défis: 102 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 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 En ligne Administrateur Points: 24146 Défis: 170 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.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 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 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 Points: 86 Défis: 0 Message

Citer : Posté le 17/07/2017 12:34 | # | Fichier joint


Voila le .zip
Up
Exagyde Hors ligne Membre 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 Maître du Puzzle Points: 1524 Défis: 11 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


Exagyde Hors ligne Membre 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 En ligne Administrateur Points: 24146 Défis: 170 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 ?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Exagyde Hors ligne Membre 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 En ligne Administrateur Points: 24146 Défis: 170 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.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Exagyde Hors ligne Membre 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 En ligne Administrateur Points: 24146 Défis: 170 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.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Ninestars Hors ligne Membre Points: 2461 Défis: 24 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 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 Rédacteur Points: 1756 Défis: 13 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
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 114 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd