Poster un nouveau sujet Poster une réponse
Comment déplacer un objet ou une image avec des touches?
Auteur Message
Jori
Avatar

Autorisation : Membre
Nb de messages : 5
Inscrit le : Sam 11 Oct 2008, 20:07
Posté le : Dim 12 Oct 2008, 0:25   Citer 

Bonjour, c'est encore moi!
Je débute en programmation, j'ai reçu ma calcullette avant-hier et j'arrête pas de la trafiquer ^^ .
J'ai une TI-82 stats.fr

Bon, je m'explique :

J'ai crée une image avec toutes les options de dessins et je l'ai enregistrée.
Je l'ai rapellée ensuite vers mon programme en fesant :


Code
:EffDessin
:RappelImage Img1



L'image s'affiche correctement, mais j'aimerai pouvoir la déplacer avec les flèches ou avec les touches 4 et 6 par exemple, comme un mini-jeu très simple.

Est-ce possible ?
Si oui, comment ?

----------------------
Jori
 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Dim 12 Oct 2008, 0:32   Citer 

Désolé de te décevoir mais l'image enregistrée s'affiche en entier et ne peut donc être placer à un endroit ou un autre.
Ca aurait été trop beau eyeonly.gif

 Adresse email Haut de page Bas de page 
 
Jori
Avatar

Autorisation : Membre
Nb de messages : 5
Inscrit le : Sam 11 Oct 2008, 20:07
Posté le : Dim 12 Oct 2008, 0:38   Citer 

Ah, et comment je pourrais faire quelque chose qui se déplace alors ?

Imaginons que je tape tout les pixels dans mon programme (oui, je suis assez fou pour faire ça ^^), est-ce qu'il y aurait moyen de fiare déplacer tout les pixels à la fois de 5 pixels vers la gauche par exemple.

Sinon par exemple pour les jeux simples du type snake ou autres, comment le serpent fait pour se "déplacer" ?

Moi je m'en fiche si je me sers pas de mon image en fait, j'aimerai juste savoir comment déplacer un objet ou quelque chsoe quoi.

----------------------
Jori
 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Dim 12 Oct 2008, 1:07   Citer 

Et bien le "dessin" (serpent dans un snake par exemple) se déplace en fonction de variables (que tu peux faire modifier par le programme en fonction des touches appuyées).

Mais très vite ça devient lourd à gérer...

 Adresse email Haut de page Bas de page 
 
Jori
Avatar

Autorisation : Membre
Nb de messages : 5
Inscrit le : Sam 11 Oct 2008, 20:07
Posté le : Dim 12 Oct 2008, 1:13   Citer 

C'est à dire ?
Je ne comprends pas bien...

Tu peux détailler plus précisément comment ça marche ?
Ca ne me déranges pas que ça soit lourd, c'est juste manière de programmer comme ça quoi.

Et justement, comment le faire modifier par le programme en fonction des touches appuyées ?

Peus-tu détailler un peu tout plus précisément ?

Merci en tout cas !

----------------------
Jori
 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Dim 12 Oct 2008, 12:36   Citer 

Et bien en gros les variables ce sont des valeurs qui changent et en fonction de leur valeur, le programme va exécuter une commande précise.
Pour faire varier la variable, on peut soit créer une boucle, soit utiliser les touches ou mettre des valeurs précises dans cerains cas.

Pour modifier les coordonées du mot afficher, on écrit l'instruction en fonction des variables.
Par exemple Ouput(Y,X,"A" affiche un A sur l'écran mais si X ou Y varie, il ne s'affichera pas au même endroit.

Sangohan38

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Dim 12 Oct 2008, 13:23   Citer 


Code
31->Y:47->X
Repeat K=22
getKey -> K

X + (K=26) - (K=24) -> X

Y + (K=34) - (K=25) -> Y

Text(Y,X,"0

End



Cet exemple de code affichera "0" au coordonnées X et Y. Attention dans ce cas comme dans pxl-On etc... les variables doivent être entières et ne pas indiquer un point hors de l'écran (0/94 et 0/62 (0/57 pour text)) !

getKey met la valeur de la touche appuyée dans la variable K. Le programme augmente ou diminue les variables de cooreonnées en fonction de la valeur de K (et donc de la touche pressée).

 Adresse email Haut de page Bas de page 
 
Jori
Invité
Posté le : Dim 12 Oct 2008, 16:59   Citer 

Aaaaah d'accord !

Super merci à vous deux !

Le seul petit problème, c'est que ma calculette est en français (Ti-82 stats.fr), donc je ne sais pas à quoi correspond la fonction getKey, j'ai regardé dans le catalogue et elle n'y est pas.

Il y a quand même quelques trucs que je ne comprends pas dans ton code (en plus c'est difficile sans l'avoir testé).

Je ne comprends pas ça :

Code
Repeat K=22



Que signifie le repeat, il sert à quoi ?
Et le 22 ici désigne la touche n°22 ou bien c'est une valeur ?

Et ça :

Code
X + (K=26) - (K=24) -> X

Y + (K=34) - (K=25) -> Y



Quelle est la valeur du déplacement à la fin quoi ?
K=34 est une touche, et non une valeur non ?

Bon en tout cas déjà un grand merci, ça m'avance vachement déjà dans mon programme, j'ai fait coordonner tout les points de mon dessin par rapport à un point X,Y et quand je change les valeurs ça marche bien.
Il ne me reste plus qu'a faire changer ces valeurs avec les touches, quand j'aurais la bonne fonction qui correspond à getKey et surtout que j'aurais compris comment ça marche ^^

  Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Dim 12 Oct 2008, 17:10   Citer 

Et bien si K=24 la calculette dit que c'est vrai donc considère comme un 1.
C'est pareil pour les autres en gros, si tu appuye sur la touche n°24 la calculette fera ces calculs:


Code
X+0-0->X
Y+1-0->Y



Sangohan38

 Adresse email Haut de page Bas de page 
 
Jori
Invité
Posté le : Dim 12 Oct 2008, 17:49   Citer 

Ah ouais, d'accord, je comprends.
Donc par exemple imaginons que je veuillels le faire déplacer de 5 pixels et pas de 1, j'ai juste à faire :

Code

X + (K=26)*5 - (K=24)*5 -> X

Y + (K=34)*5 - (K=25)*5 -> Y



C'est bien ça ?

Et encore et toujours merci ^^

PS : Aucun rapport, mais je n'arrive pas à me connecter, c'est pour ça que je suis en invité.

  Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Dim 12 Oct 2008, 18:07   Citer 

C'est bien ça winkle.gif

Note que seuls les touches flèches et DEL dont répétitives (si tu reste appuyez sur le [5] pour bouger tu ne changeras de place qu'une fois, tandis que si la touche prévue est la flèche, tu continueras en boucle).

 Adresse email Haut de page Bas de page 
 
Jori
Invité
Posté le : Dim 12 Oct 2008, 18:15   Citer 

C'est re-moi, excusez moi pour le double post, mais je ne peux faire autrement.

Pour la boucle repeat tant que K=22 ça veut dire quoi en fait, K est égal à 22 si on tape sur la touche "mode [quitter]"
Ou alors est-ce que le script s'arrête au bout de 22 déplacements ?

Bref, à quoi sert cette boucle repeat et comment elle marche, s'il vous plait.

  Haut de page Bas de page 
 
Jori
Invité
Posté le : Dim 12 Oct 2008, 18:18   Citer 

Mince, j'avais pas vu ton message avant de poster.

Merci pour l'info de la répétition, la touche del correspond-t-elle à la touche suppr sur la Ti stats fr ?

C'est bon à savoir tout ça, merci beaucoup !

  Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Dim 12 Oct 2008, 18:28   Citer 

La touche DEL correspond à la touche SUPPR sur la calculette française.

Sangohan38

 Adresse email Haut de page Bas de page 
 
Jori
Invité
Posté le : Dim 12 Oct 2008, 18:45   Citer 

Ok, merci !

J'ai quand même un problème, le code que tu m'as filé, coc5, je l'ai rentré dans am calculette avec la fonction codetouche (à la place de getKey comme ma calculette estg en français), et quand j'appuie sur les flèches du haut et de droite, ça dessine des pixels derrière le passage du 0, et les flèches bas et gauchent font uniquement déplacer le 0 et effacent ces pixels dessinés quand le 0 repasse dessus.

Comment ça se fait ?

Voici le code que j'ai tapé :

Code
31->Y:
47->X
Repeat K=22
codeTouche->K

X+(K=26)-(K=24)->X
Y+(K=34)-(K=25)->Y

Text(Y,X,"0

End



  Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Dim 12 Oct 2008, 19:22   Citer 

C'est normal, c'était un code d'exemple ^^

Pour répondre à ta première question, La boucle se répète tant que l'utilisateur n'appuie pas sur la touche 22 soit la touche quit/mode.

Donc pour la trace c'est normal, mais il faut comprendre le fonctionnement de la commande texte pour cela -_-
Pour faire simple, en faisant texte(X,Y,"0 tu affiche cela sur l'écran :
0100
1010
1010
1010
0100


La calculatrice efface les pixels là où il y a 0 et les allument là où il y a 1.
Il arrive donc que les 0 effacent une partie des traces.

Pour éviter cel, c'est simple, tu sauvegardes les données X et Y ; il ne te reste plus qu'à effacer l'ancien 0 avant l'affichage du prochain !

Text(U,V," <- trois espaces


 Adresse email Haut de page Bas de page 
 
Jori
Invité
Posté le : Dim 12 Oct 2008, 20:23   Citer 

Oulalalala !
Ça se complique là !

Je n'ai pas bien compris, comment on "sauvegarde les données X et Y" ?
Et comment on "efface l'ancien 0 avant l'affichage du prochain" ?

J'ai compris le fonctionnement, mais pas comment on fait, et à la fin tu dis :
Text(U,V," <- trois espaces

Quoi trois espaces ?
A la place du 0 je met 3 espaces ?

  Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Dim 12 Oct 2008, 21:17   Citer 

31->Y:______________________________//On initialise les variables X et Y.
47->X
Repeat_K=22__________________________//Le programme répetera ce qui va suivre (jusqu'au End ) jusqu'à ce que la touche pressée soit [MODE]
codeTouche->K________________________
X->U:Y->V____________________________//On enregister les variables avant leur changement.
X+(K=26)-(K=24)->X___________________//On modifie les variables en fonction des touches pressées.
Y+(K=34)-(K=25)->Y

Text(U,V," "_______________________//On efface l'endroit de l'écran ou est le "0".
Text(Y,X,"0__________________________//On affiche le "0" aux coordonnées Xet Y.

End__________________________________// Fin de la boucle.

 Adresse email Haut de page Bas de page 
 
Jori
Invité
Posté le : Dim 12 Oct 2008, 22:33   Citer 

Super Merci !

Ca marche bien !

Par contre quand je veux l'adapter à mon programme, y'a des bugs.
Je m'explique, en fait dans mon programme j'ai déssiné un monocycle avec tout les pixels, et les pixels sont tous reliés a un même pixels de coordonné X,Y.
Mes points sont de coordonnées X+1,Y-3 par exemple.


J'ai donc mis le code que tu m'as passé mais sans les U et V car je n'utilise pas de fonctions pour afficher du texte.

Mon problème est un peu le même que tout à l'heure, quand je déplace mon monocycle avec les flèches, il laisse du noir derrière lui, dans n'importe quelle direction qu'il aille.

Comment puis-je arranger ça ?
Je suppose que ça doit être dans le même style que le bug d'avant mais je sais pas trop comment m'y prendre.

Voici mon code simplifié là où il y a des dessins :


Code
:3->X
:44->Y

:Repeat K=22
:getKey->K

:X+(K=26)*5-(K=24)*5->X
:Y+(K=34)*5-(K=25)*5->Y

:Pt-On(X,Y)

:Line(Y+1,X,Y+5,X)
:Line(Y-2,X+1,Y+7,X+1)
//etc...

:End



Voilà, comment puis-je arranger mon bug ?

  Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Lun 13 Oct 2008, 0:09   Citer 

*Attention ! Je vois que tu as utilisé des ligne( qui font parties (comme les Pts) des affichages RELATIFS (relatif au cadrage Xmin/Xmax/Ymin/Ymax).

*Les Pxl() et Text()sont des affichages ABSOLUS et mais ne peuvent prendre que des valeurs entières et dans l'écran (contrairement aux relatives qui ne buguent pas dans ces cas-là).

*Donc sinon c'est le même système : Ligne(X,Y,A,B) affiche et Ligne(X,Y,A,B,0) efface. Pt-On devient Pt-Off, Pxl-On Pxl-Off etc...

*Note : Pt-Change et pxl-change inversent le pixel visé (en font du négatif quoi).

*Au lieu de tout recopier tu peux fair un :



Code
EffDessin
0 -> X:0 -> Y
Repeat K=22
 For(I,0,1)
If I:Then
getKey -> K
X + (K=26) - (K=24) -> X
Y + (K=34) - (K=25) -> Y
End

*Tes Lignes* ex : Ligne(X,Y,X+1,Y+1,I)
End



 Adresse email Haut de page Bas de page 
 
Jori
Invité
Posté le : Lun 13 Oct 2008, 14:45   Citer 

Salut !

Merci, j'ai testé ça, mais le problème c'est que le curseur se déplace au lieu du monocycle.

De plus, je n'ai pas bien compris le système de ta boucle, peut-tu m'expliquer ?

  Haut de page Bas de page 
 
Jori
Invité
Posté le : Lun 13 Oct 2008, 17:49   Citer 

Bon finalement j'ai réussi à adapter ton code.

Par contre, je ne comprends toujours pas comment marche ton code.
Surtout au niveau du if I et même du for .
Peut tu m'expliquer le fonctionnement ?

Sinon, voilà le code que j'ai mis, pour l'adapter sur mon programme (j'ai inversé Y et X au début et j'ai la flemme de tout réécrire) (J'ai réussi a mettre ma calculette en anglais pour pas avoir a tout retranscrire) :


Code
3->X
44->Y

Repeat K=22

For(I,0,1)
IF I
Then

getKey->K
Y+(K=26)*5-(K=24)*5->Y
X+(K=25)*5-(K=34)*5->X

End

Line(Y,X,Y+1,X+1,I)
*ETC...*

End
End *(j'ai rajouté un End parce que sinon la boucle repeat n'était pas fermée)*



Mon dessin ne se recopie pas à chaques déplacements, il s'efface bien, le seul gros problème est qu'il s'éface et se construit tout le temps, la boucle est sans fin, il doit y avoir une erreur de ma part.

Sinon peut-être pour que mon programme soit plus rapide il faudrait que je fasse tout les pixels du décor avec Pt-Change, mais je ne sais pas trop comment m'y prendre, tu pourrais m'expliquer (si tu sais bien sûr).
On m'as dit de faire avec des tables maisj e ne sais pas comment ça marche et comment m'y prendre, en core une fois.

En tout cas encore et toujours merci à vous !

  Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Lun 13 Oct 2008, 19:17   Citer 

Pour faire simple la boucle for() permet de lire l'affichage des lignes d'abord en effaçant ( Quand I=0 ) et en réaffichant avec les nouvelles valeurs ( Quand I=1 ).
Pour éviter le "clignotement" du dessin, rajoute ce code avant le for() (après le Repeat)


Code

Repeat K:getKey->K:End



(ce code va attendre que l'utilisateur appuie sur un touche)

Et pense à enlever l'autre getKey->K dans le If !

 Adresse email Haut de page Bas de page 
 
Jori
Invité
Posté le : Lun 13 Oct 2008, 20:29   Citer 

Euh, ok pour le fonctionnement du for et du if, mais le truc c'est que j'ai rajouté ce que tu m'as dit, mais le bug c'est que le dessin s'affiche après qu'on ai appuyé sur une touche, et quand on veut le faire bouger par la suite, ça affiche le curseur et le dessin ne bouge pas.

Si au contraire j'enlève le end et que je le remet à la fin (pour que le repeat fonctionne jusqu'a la fin du code), l'image clignote, je la déplace un coup puis elle s'arrête de clignoter et si je rappuie sur une touche de déplacement le curseur apparait.

J'ai fait plusieur test mais je n'arrive toujours pas à résoudre le problème.

  Haut de page Bas de page 
 
Setich
Invité
Posté le : Mer 05 Nov 2008, 10:55   Citer 

Bonjour
J'ai un problème avec le code touche .
J'ai suivi ce qu'il y a sur ce forum mais j'ai pas tout compris.
Quelqu'un pourrait m'expliquer comment l'utiliser .?
Merci d'avance

  Haut de page Bas de page 
 
Setich
Invité
Posté le : Sam 08 Nov 2008, 8:55   Citer 

Je sais maintenant comment me servir du code touche godgrace.gif
mais je ne sais pas commet faire par exemple , un personnage
a la rpg maker ou genre pokemon deplaçable .
(Je pense qu'il faut faire ça par pixel )
non?
aidez-moi svp .

  Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Sam 08 Nov 2008, 11:36   Citer 

Ca ne se fait pas comme ça. Il y a plusieurs trucs à savoir. Mais déjà pixels par pixels sera assez long, il faut mieux utiliser l'écran principal avec des Output(X,Y,"0".
Et tu fais bouger le perso en modifiant les variables X et Y selon le codetouche.

 Adresse email Haut de page Bas de page 
 
Setich
Invité
Posté le : Sam 08 Nov 2008, 13:55   Citer 

Le problème c'est que j'aimerais faire un personnage
du genre Pokémon , c'est pas possible alors .
Parceque je sais qu'avec output mon personnage ressemble
à 0 ou 1 ou L ou X ... .

  Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Sam 08 Nov 2008, 17:25   Citer 

C'est possible seulement, ce sera très long.
L'autre méthode, c'est d'utiliser l'assembleur.

Sangohan38

 Adresse email Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Sam 08 Nov 2008, 23:56   Citer 

C'est bien ça pour débuter en programmation eyeonly.gif

 Adresse email Haut de page Bas de page 
 
Setich
Invité
Posté le : Lun 10 Nov 2008, 18:24   Citer 

Qu'est-ce que c'est l'assembleur ?
Un language de programation ?
Si oui où peut-on l'apprendre ? (je parle d'un site)
Texte dans une autre taille

  Haut de page Bas de page 
 
coc5
Avatar

Autorisation : Membre
Nb de messages : 879
Inscrit le : Sam 16 Jui 2007, 13:37
Posté le : Lun 10 Nov 2008, 18:27   Citer 

C'était ironique, l'assembleur est un langage proche de la machine (proche du binaire). Déconseillé pour apprendre la programmation !
Le site du zéro en propose tout de même un début, et plein de sites proposent des petits boûts de conseils etc...

 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 9 requêtes