Autorisation : Membre
Nb de messages : 34
Inscrit le : Mar 03 Jan 2012, 23:40
Posté le : Dim 15 Jan 2012, 21:19
Salut a tous !
Je suis entrain de programmer un petit jeu, on est un "o" et on se deplace sur l'ecran, et à une certaine coordonée il nous arrive quelque chose.
Bref, j'ai juste un probleme, je n'arrive pas à inserer une image en fond, qui representerais les chemins et le décors car le deplacement du personnage necessite l'utilisation d'une boucle... Donc l'image de fond clignote et c'est tres desagréable, j'aimerais trouver une façon pour que l'image reste tout le temps visible comme dans la plupart des labyrinthes.
Donc est-ce que vous savez comment faire pour mettre l'image sans qu'elle se mette a clignoter a cause de la boucle, en sachant que si je la mets avant la boucle elle s'efface, parce qu'il y a des output je suppose, et si il y a un autre moyen qu'une boucle pour se deplacer (mais je ne pense pas...)
Merci d'avance
---------------------- La programmation aujourd’hui est une course entre les développeurs tâchant de concevoir des programmes de plus en plus nombreux et efficaces, convenant même aux imbéciles, et l’univers essayant de produire des imbéciles de plus en plus nombreux et efficaces.
Jusqu’à présent, c’est l’univers qui gagne.
Autorisation : Membre
Nb de messages : 438
Inscrit le : Dim 12 Déc 2010, 20:44
Posté le : Dim 15 Jan 2012, 21:56
Salut, dessinnes ton image avnt de coder, puis ensuite tu vas dans [2nde] + [prgm] + [gauche] et tu choisis sauveImage ou StorePic ensuite tu vas dans [var] + [4] et tu choisis une image.
Ensuite dans ton programme, avant la boucle tu mets RappelImage ton image, mais dans ta boucle, tu dois afficher le personnahge sur le graphique, abev Text( et non des outptus. Le système de coordonnées fonctionne de la même maniere. Simplement au lieu d'etre limité a 8 et 16, tu iras jusqu'à environ 60 et 95.
Autorisation : Membre
Nb de messages : 34
Inscrit le : Mar 03 Jan 2012, 23:40
Posté le : Dim 15 Jan 2012, 22:20
Mais oui bien-sur! Merci
En fait j'ai meme dans la tête de faire un mini (je dis bien mini) Rpg, bon comme je suis débutant je ne vais rien coder de lourd mais plusieur cartes et tout, j'exprimerais le fond de ma pensé plus tard, parce que je suis sur mon itouch et c'est assez galere/chi*ant d'ecrire de longs pavés...
EDIT: et si maintenant je veux améliorer mon personnage et ne pas le mettre en "o", mais plus en bonhomme en pixel, je ne peux pas l'enregistrer en image et la mettre dans le programme, en tout cas je ne sais pas comment faire bouger une image par dessus une autre image... Donc ce personnage je dois le faire en ligne de codes?
---------------------- La programmation aujourd’hui est une course entre les développeurs tâchant de concevoir des programmes de plus en plus nombreux et efficaces, convenant même aux imbéciles, et l’univers essayant de produire des imbéciles de plus en plus nombreux et efficaces.
Jusqu’à présent, c’est l’univers qui gagne.
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 16 Jan 2012, 0:23
Oui il faut l'écrire en lignes de codes. En language TI-Basic, il n'y pas d'autre choix.
Il faut écrire la procédure en fonction de coordonnées.
Regarde les premiers "Line" qui sont dans le prog que j'ai posté sur ton autre sujet si tu ne vois pas ce que je veux dire.
Une autre méthode particulière appelée Text-sprite est expliquée sur le SDZ
Ce sera en revanche galère d'avoir un bonhomme par dessus un fond sans effacer le fond.
Quand c'est possible on reconstitue le décor au fur et à mesure mais on est souvent contraint de redessiner la totalité du décor.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 34
Inscrit le : Mar 03 Jan 2012, 23:40
Posté le : Lun 16 Jan 2012, 18:15
Tu parle de ce code?
Citer
EffVar S // le score à 0
While 1 // boucle infinie
RappelImage 1 // le viseur
Texte(0,0,S
Repeat 1=EntAleat(1,40
End
RappelImage 2 // le bonhomme
EffVar A
For(W,1,200 // execute le contenu 200 fois, chez moi ça dure 3 secondes.
codeTouche // capte une pression de touche, sinon vaut 0
If Rép // détecte que le codetouche est non nul
Rép->A // remplace A par le codeTouche s'il est non nul
End
If A // =105 possible, mais sans, l'appui sur une quelconque touche suffit
S+1->S // marque un point
EffDessin
End // retour au While 1
Si oui, je n'ai pas trop compris a quoi ca sert ^^
Mais c'est bon j'ai fait mon perso en codes
Merci
---------------------- La programmation aujourd’hui est une course entre les développeurs tâchant de concevoir des programmes de plus en plus nombreux et efficaces, convenant même aux imbéciles, et l’univers essayant de produire des imbéciles de plus en plus nombreux et efficaces.
Jusqu’à présent, c’est l’univers qui gagne.
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Lun 16 Jan 2012, 21:06
Je voulais parler du second programme, celui qui a des Line(A,B,A,B).
Je pensais donner un exemple clair parce que la dernière fois que j'ai expliqué à quelqu'un le dessin de cette manière, j'ai dû m'y reprendre à plusieurs fois...
L'essentiel est que tu ais trouvé comment dessiner ton bonhomme avec des fonctions de dessins déplaçable.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 34
Inscrit le : Mar 03 Jan 2012, 23:40
Posté le : Lun 16 Jan 2012, 23:46
Je me suis aperçu apres que tu ne pouvais que parler de ce code ^^
Mais je pense que le plus simple pour pouvoir effacer la trace que le personnage laisse en se deplacant est de le faire a la taille d'un espace (5*5 je crois) et de le faire se deplacer de 5 pixels...
Donc je l'ai fait en sprite horizontal, ca donne ca:
Code
"(!2!("->chaine1 // 2 représente le symbole "au carré", et (!2!( fait penser a un "space invader" en sprite
For(I,1,longueur(chaine1)-1
Texte(0,I,sous-chaine(chaine1,I,1
End
chaine = str
Sous-chaine = sub
Longueur = lenght
Mais seulement, comment definir les coordonnée du personnage...
---------------------- La programmation aujourd’hui est une course entre les développeurs tâchant de concevoir des programmes de plus en plus nombreux et efficaces, convenant même aux imbéciles, et l’univers essayant de produire des imbéciles de plus en plus nombreux et efficaces.
Jusqu’à présent, c’est l’univers qui gagne.
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 17 Jan 2012, 0:24
La difficulté n'est pas d'effacer le personnage, c'est de redessiner le décor derrière lui.
Mais on préfère souvent s'en passer comme dans HERSSAHE où le décor s'efface mais ne se reconstitue pas en permanence.
---
Les coordonnées de CE text-sprite sont celles du pixel en haut (ligne vierge) à gauche du sprite (0,1).
Le premier réflexe de substitution des des coordonnées est celui-ci : Text(A+0,B+I,"
Il y a un décalage entre les coordonnées de base du Text et les pixels du sprite.
Mais en modifiant les arguments de la fonction Text on peut viser le pixel de notre choix. Il ne s'agit que d'une référence. (cf la suite)
Tu peux effacer la dernière colonne de pixels si tu veux avec un espace.
Tu peux fixer la dernière itération de la boucle sans te servir de la fonction longueur si tu ne changes pas de sprite entre deux lectures du For.
---
Code
Prompt A,B // coordonnées
For(I,1,6
Texte(A-1,B+I-1,sous-chaine("(!2!( ",I,1
End
Avec A-1, le sprite est dessiné une ligne plus haut que A.
Avec B+I-1 (initialement I=1 donc B+I-1=B) le sprite est dessiné précisément en démarrant à B.
Ainsi cela revient à dire que A et B sont ICI les coordonnées du pixel utile en haut à gauche. (pas sur une colonne de trop à gauche ni sur la ligne vierge)
Néansmoins on recherche une manière d'avoir le moins de calculs possible à l'intérieur du Text afin que le sprite soit le plus fluide possible.
Dans ce cas le reste du programme est modifié pour compenser le décalage des pixels.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 2086
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Mar 17 Jan 2012, 8:02
Si vous voulez reconstituer le décor à chaque tour mais suffisament vite pour que l'écran ne "clignote" pas sans cesse, vous pouvez utiliser un une image en assembleur.
C'est en fait un programme en hexadécimal qui affiche l'image sur l'écran quand il est lancé.
Il y a un logiciel créé par Alexvire, ou encore celui intégré au site Cemetech qui permettent de convertir ces images en programmes hexadécimal.
L'avantage c'est que ça va vite, le désavantage, c'est que ça prend 1300 octets.
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 17 Jan 2012, 14:43
Ah, oui, j'oublie souvent la possibilité l'assembleur assisté par logiciels de ce type.
Je ne me souvenais pas d'un tel poids.
Tu m'apprends quelque chose avec ce convertisseur Cemetech.
Je compte l'ajoûter dans l'article des screenshots.
(je n'avais pas remarqué que sourcecoder traîte aussi des images )
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 34
Inscrit le : Mar 03 Jan 2012, 23:40
Posté le : Mar 17 Jan 2012, 18:40
Merci pour les infos
Parcontre ton code, linkakro,
Code
Prompt A,B
For(I,1,6
Texte(A-1,B+I-1,sous-chaine("(!2!( ",I,1
End
La calulatrice me demande A et B, normal, a cause du prompt...
Donc je ne sais pas si j'ai pas compris quelque chose, mais est ce que vous avez une solution?
---------------------- La programmation aujourd’hui est une course entre les développeurs tâchant de concevoir des programmes de plus en plus nombreux et efficaces, convenant même aux imbéciles, et l’univers essayant de produire des imbéciles de plus en plus nombreux et efficaces.
Jusqu’à présent, c’est l’univers qui gagne.
Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 17 Jan 2012, 18:44
Sinon, une méthode qui peut aussi fonctionner (mais qui manque un peut de fluidité serait d'utiliser des pixels-change commen en assembleur, mais c'est lourd et surtout lent.
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
V
_____
_***_ <--
**_**
**_**
*_*_*
_***_
second pixel de la première colonne = pixel de coordonnées A et B par mon code
Avec un peu d'immagination on peut combiner Texte, Pxl-Change, Ligne, ...
Mais je crois que peu de ces choses valent le Text-sprite.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 34
Inscrit le : Mar 03 Jan 2012, 23:40
Posté le : Mar 17 Jan 2012, 20:29
Et bien tout ce que je vois, c'est que avec tes code :
Prompt A,B
For(I,1,6
Texte(A-1,B+I-1,sous-chaine("(!2!( ",I,1
End
Ma calto affiche
A?
B?
A cause du prompt sans doute...
---------------------- La programmation aujourd’hui est une course entre les développeurs tâchant de concevoir des programmes de plus en plus nombreux et efficaces, convenant même aux imbéciles, et l’univers essayant de produire des imbéciles de plus en plus nombreux et efficaces.
Jusqu’à présent, c’est l’univers qui gagne.
Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Mar 17 Jan 2012, 20:40
oui, c'est pour demander où afficher (il faut mettre 2 entiers positifs (pas trop grands)). Sans un vrai programme, A et B seraient demandés et non calculés.
Sandro
---------------------- mort à l'inutile, place à la mémoire libre et aux programmes
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 17 Jan 2012, 20:40
Quand la calculatrice écrit "A=?" saisi à la suite "10". Fait de même avec "B=?".
Ensuite le programme devrait dessiner ton sprite à la position (10,10) (un peu en haut à gauche) de ton écran.
Je pensais que tu connaissait Prompt, elle est élémentaire.
J'ai utilisé Prompt pour mettre en évidence les deux variables A et B qui sont les entrées nécessaires à l'usage du For et de tout ce qui suit.
Dans un jeu les variables seront évidemment définies autrement que par un Prompt.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 2086
Inscrit le : Sam 23 Jan 2010, 20:09
Posté le : Mer 18 Jan 2012, 18:17
@ linkakro: on s'est mal compris:
Le logiciel d'images tu le connais déjà (celui d'Alexvire),
et quand je parlais de gérer les images, les programmes, les chaines, les fonctions, je parlais de Sourcecoder.
Si tu veux un logiciel qui fait tout ça à la place de Sourcecoder, tu as TI Connect
TI Data Editor, TI Program Editor et TI Screen Capture.
Autorisation : Membre
Nb de messages : 34
Inscrit le : Mar 03 Jan 2012, 23:40
Posté le : Mer 18 Jan 2012, 21:42
Si si je connais prompt, mais le problème est que j'ai integré mon sprite dans mon programme pour faire mon perso qui se déplace, et la le programme me demande A et B, donc j'enleve le prompt et la la calculatrice m'indique err domaine a la fin de "texte(A-1,B+1-I,souschaine("(!2!( ",I,1"
---------------------- La programmation aujourd’hui est une course entre les développeurs tâchant de concevoir des programmes de plus en plus nombreux et efficaces, convenant même aux imbéciles, et l’univers essayant de produire des imbéciles de plus en plus nombreux et efficaces.
Jusqu’à présent, c’est l’univers qui gagne.
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 18 Jan 2012, 21:54
Il faut adapter les variables de ce fragment au reste de ton programme.
Tel que je te l'ai donné 1<=A<=58 et 0<=B<=89.
Bien sûr tu peux remplacer A et B par d'autres variables tant qu'elles représentent les coodonnées dans ton programme.
Et tu peux te contenter de Texte(A,B+I,... pour les coordonnées mais cela oblige de raisonner avec des coordonnées légèrement décalées et apportant donc des contraintes.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 34
Inscrit le : Mar 03 Jan 2012, 23:40
Posté le : Mer 18 Jan 2012, 22:25
En fait j'avais oublié de changer les variables...
Mais j'ai toujours erreur domaine, surement parce que les valeur de X et Y (ou A et B) se trouvent en dehors de l'ecran... Mais j'ai essayer de les mettre de sortes que le personnage soit au milieu de l'ecran, et ca m'indique encore erreur domaine, une idée?
---------------------- La programmation aujourd’hui est une course entre les développeurs tâchant de concevoir des programmes de plus en plus nombreux et efficaces, convenant même aux imbéciles, et l’univers essayant de produire des imbéciles de plus en plus nombreux et efficaces.
Jusqu’à présent, c’est l’univers qui gagne.
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 19 Jan 2012, 0:23
Dis moi quelles valeurs ont X,Y et aussi I juste après l'erreur.
Si tu as tapé rigoureusement le fragment de code alors je pourais tester directement.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 34
Inscrit le : Mar 03 Jan 2012, 23:40
Posté le : Mer 25 Jan 2012, 22:40
Tout d'abord désolé pour l'enorme retard, j'etais à l'etranger
Alors y=1 et x=1, et... Oh decidement je suis un peu *** je n'ai pas définit I ><'
Je dois lui affecter quelle valeur?
---------------------- La programmation aujourd’hui est une course entre les développeurs tâchant de concevoir des programmes de plus en plus nombreux et efficaces, convenant même aux imbéciles, et l’univers essayant de produire des imbéciles de plus en plus nombreux et efficaces.
Jusqu’à présent, c’est l’univers qui gagne.
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 25 Jan 2012, 23:30
I est géré par la boucle For. En Ti-Basic, pas besoin de le déclarer.
I vaut 1 à la première execution de la boucle, puis 2 et ainsi de suite jusqu'à 6.
J'ai besoin de connaître I au moment de l'erreur pour savoir à quelle execution de la boucle le programme plante.
Pour {X,Y}={1,1} je n'ai aucun problème : le sprite ce dessine en haut à gauche avec un pixel de marge au dessus et à gauche.
Teste le une bonne fois avec la structure de base puis affine les réglages :
Code
Prompt Y,X // coordonnées
For(I,1,6
Texte(Y,X+I,sous-chaine("(!2!( ",I,1 // ou bien Y-1,X+I-1 pour affiner
End
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Autorisation : Membre
Nb de messages : 34
Inscrit le : Mar 03 Jan 2012, 23:40
Posté le : Jeu 26 Jan 2012, 22:03
Alors j'ai rentré ton code (enfin il l'etait deja ^^)
J'ai I=2 lors de l'erreur, et il me met une erreur domaine a la fin de
Texte(Y-1,X+I-1,sous-chaine("(!2!( ",I,1
---------------------- La programmation aujourd’hui est une course entre les développeurs tâchant de concevoir des programmes de plus en plus nombreux et efficaces, convenant même aux imbéciles, et l’univers essayant de produire des imbéciles de plus en plus nombreux et efficaces.
Jusqu’à présent, c’est l’univers qui gagne.
Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Ven 27 Jan 2012, 0:10
Je crois que j'ai trouvé.
Vérifie X et Y après l'erreur même si tu les as saisis dans Prompt.
Y a-t-il un EffDessin juste avant ton code ? La première fonction Text ou Pt suivant un EffDessin réinitialise Y.
Regarde cet article pour comprendre. Le premier des deux bugs signalés.
Le plus simple pour corriger ce bug est d'ajoûter pt-Off(0,0) juste après le EffDessin.
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)