Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Problème de compatibilité sh4
Rudy49 Hors ligne Membre Points: 37 Défis: 0 Message

Problème de compatibilité sh4

Posté le 23/05/2020 17:08

Bonjour à tous !!
J'ai un petit programme qui fonctionne à merveille sur émulateur mais pas sur ma calto.
Lorsque j'appuis sur une touche (ici ALPHA), un projectile est tiré depuis le sprite principal. Mais, sur calculatrice, il s'affiche juste, sans se déplacer !

Problème de code ? Et non ! J'ai utilisé le même bout de code pour le déplacement du sprite principal et cela fonctionne très bien.
Je précise que j'ai une calculatrice 35+E changé en 75 et que je l'ai passé au sh4 compatibility (case coché et décoché même problème), j'ai aussi tenté de modifier MonochromeLib avec la méthode de Louloux, sans plus de résultat.
Une solution ?


Lephenixnoir Hors ligne Administrateur Points: 22770 Défis: 149 Message

Citer : Posté le 23/05/2020 17:09 | #


On ne va pas pouvoir te dire grand-chose sans le code !
Rudy49 Hors ligne Membre Points: 37 Défis: 0 Message

Citer : Posté le 23/05/2020 17:12 | # | Fichier joint


Effectivement. Le voici (oui je sais il est Très mal optimisé)!
Les inconnus a écrit :
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !
Lephenixnoir Hors ligne Administrateur Points: 22770 Défis: 149 Message

Citer : Posté le 23/05/2020 21:20 | #


Il y a pas mal de problèmes dans ce code juste à la lecture. Notamment :

if(T=1){

if (IsKeyDown){

if (level = 1) {

Après c'est pas tant une question d'optimisation que d'éparpillement. Sépare au moins la simulation, le dessin et les entrées. ^^"
Rudy49 Hors ligne Membre Points: 37 Défis: 0 Message

Citer : Posté le 23/05/2020 22:51 | #


Euh... j'ai pas très bien compris ce q'il faut que je change. Le prog fonctionne (sur émulateur du moins) c'est le principal non ?

Pas compris non plu ce qu'il faut que je sépare.
Les inconnus a écrit :
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !
Tbit Hors ligne Membre Points: 14 Défis: 0 Message

Citer : Posté le 23/05/2020 23:01 | #


As far as I know,
GetKeyWait
is the only SH4-compatible keypad handling function.

Also, I think an assignment like
T = 1
will evaluate to the assigned value (1 in this case), so
if(T = 1)
will always be true.
Lephenixnoir Hors ligne Administrateur Points: 22770 Défis: 149 Message

Citer : Posté le 23/05/2020 23:40 | #


Rudy49 a écrit :
Euh... j'ai pas très bien compris ce q'il faut que je change. Le prog fonctionne (sur émulateur du moins) c'est le principal non ?

Malheureusement c'est dans l'autre sens que ça marche : si le programme ne fonctionne pas sur la calculatrice alors il est buggé, et c'est par chance qu'il tombe en marche sur l'émulateur. Les cas où un programme ne marche et le problème n'est pas dans le code sont très rares et c'est certainement pas la première chose à s'imaginer en cas de problème.

Dans if(var = valeur) { ... } tu ne compares rien (la comparaison c'est ==), tu assignes une nouvelle valeur. C'est équivalent à var = valeur; if(var) { ... } et if(var) tout seul est une forme courte pour if(var != 0). Autrement dit if(T=1) affecte 1 à T et est toujours vrai ; pareil pour level = 1.

Dans if(IsKeyDown) tu n'appelles même pas la fonction donc tu ne testes rien de ce qui est pressé sur le clavier. Cette condition teste juste si la fonction IsKeyDown "existe" et sera toujours vraie. Il n'y a pas de façon immédiate de savoir si au moins une touche est pressée.

Pas compris non plu ce qu'il faut que je sépare.

Ton code est éparpillé dans le sens où ta boucle principale mélange plein de choses :
• La simulation : toute la partie physique, mise à jour de la position des objets, etc.
• Le dessin du jeu à l'écran.
• La gestion des entrées avec les touches pressées.
Ça ne veut pas dire que le programme ne peut pas marcher, mais plus tu manques l'organisation et plus des bugs vont se glisser de façon inaperçue.

Tbit a écrit :
As far as I know, GetKeyWait is the only SH4-compatible keypad handling function.

This is incorrect, every keyboard function is SH4-compatible; IsKeyDown() requires the SH4 Compatibility Tool for a patch, all the others work immediately. Also SDK's GetKeyWait is broken and never sets the keycode, so it's pretty unusable.

Enfin, pour ce qui est de la partie "non déterministe" du code (le fait qu'il ne se comporte pas de la même façon à tous les coups, et ici selon la plateforme), les premiers coupables à regarder sont les valeurs non initialisées.
Tbit Hors ligne Membre Points: 14 Défis: 0 Message

Citer : Posté le 23/05/2020 23:54 | #


Also SDK's GetKeyWait is broken and never sets the keycode, so it's pretty unusable.

Sorry, I was thinking of syscall 0x247, which returns the row and column
Lephenixnoir Hors ligne Administrateur Points: 22770 Défis: 149 Message

Citer : Posté le 24/05/2020 08:32 | #


In this case no problem, it works like a charm. Even better, all syscalls are SH4-compatible, which kinda saved the day back in 2012
Rudy49 Hors ligne Membre Points: 37 Défis: 0 Message

Citer : Posté le 30/05/2020 14:13 | #


Après un test, je me suis rendu compte que c'étais ça qui buggais (l'histoire des T=1)

Merci !
Thank you all !
Les inconnus a écrit :
Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu'ils le sont !
Lephenixnoir Hors ligne Administrateur Points: 22770 Défis: 149 Message

Citer : Posté le 30/05/2020 14:19 | #


Parfait, content que le problème soit résolu !

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 v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 48 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