Appearance
question:J'ai deux fichiers processing, un qui code un paysage, un qui code une mommie, j'ai initialisé la mommie comme suit : pushMatrix(); translate(width/2+450, height/2+560,19); scale(0.05); rotateX(-1*HALF_PI); rotateY(HALF_PI); shape(mummy); popMatrix(); et j'ai stocké sa posiiton de la maniere suivante: float mx = width/2+450; float my = height/2+560; float dx; float dy; Dans mon code keypress j'ai fait en sorte que la mommie puisse tourner à droite, mais elle n'avance pas, en réalité, elle avance mais elle fait comme si elle n'a pas tourné à droite, elle a juste rotate en fait. Souhaites-tu voir le code?
answer:Oui, je veux bien voir le code pour pouvoir t'aider à résoudre ton problème.
question:void keyPressed() { int labposx = (posX-20)/40; int labposy = (posY-20)/40; int mov = 40; if (keyCode == UP){ animR = false; animL = false; if (labposx == LAB_SIZE-2 && labposy == LAB_SIZE-1){ posX = pos1X; posY = pos1Y; Z = Z1; dirX = dir1X; dirY = dir1Y; Zdir = Z1dir; dir = 0; level +=2; mx = mx1; animT = false; } if (dir==0 && (labposx >= LAB_SIZE-1 || labposx <= 0 || labposy <= 0 || labposy >= LAB_SIZE-1 || labyrinthe[labposx+1][labposy]==' ')){ animT = true; posX += mov; dirX += mov; mx += mov; anim = 0; } else if (dir == 1 && (labposx >= LAB_SIZE-1 || labposx <= 0 || labposy <= 0 || labposy >= LAB_SIZE-1 || labyrinthe[labposx][labposy+1]==' ')){ animT = true; posY += mov; dirY += mov; mx += mov; anim = 0; } else if (dir == 2 && (labposx >= LAB_SIZE-1 || labposx <= 0 || labposy <= 0 || labposy >= LAB_SIZE-1 || labyrinthe[labposx-1][labposy]==' ')){ animT = true; posX -= mov; dirX -= mov; mx -= mov; anim = 0; } else if(dir == 3 && (labposx >= LAB_SIZE-1 || labposx <= 0 || labposy <= 0 || labposy >= LAB_SIZE-1 || labyrinthe[labposx][labposy-1]==' ')){ animT=true; posY -= mov; dirY -= mov; my -= mov; anim = 0; } } if (keyCode == DOWN){ animT = false; animR = false; animL = false; if (dir==0 && (labposx >= LAB_SIZE || labposx <= 0 || labposy <= 0 || labposy >= LAB_SIZE || labyrinthe[labposx-1][labposy]==' ')){ posX -= mov; dirX -= mov; mx -= mov; anim = 0; } else if (dir == 1 && (labposx >= LAB_SIZE || labposx <= 0 || labposy <= 0 || labposy >= LAB_SIZE || labyrinthe[labposx][labposy-1]==' ')){ posY -= mov; dirY -= mov; mx -= mov; anim = 20; } else if (dir == 2 && (labposx >= LAB_SIZE || labposx <= 0 || labposy <= 0 || labposy >= LAB_SIZE || labyrinthe[labposx+1][labposy]==' ')){ posX += mov; dirX += mov; mx += mov; anim = 0; } else if (dir == 3 &&(labposx >= LAB_SIZE || labposx <= 0 || labposy <= 0 || labposy >= LAB_SIZE || labyrinthe[labposx][labposy+1]==' ')){ posY += mov; dirY += mov; my += mov; anim = 0; } } if (keyCode == RIGHT){ animT = false; animR = true; animL = false; double csc = -1; double powx = (dir/2)+1; double powy = (dir+1)/2; int addx = ((int) Math.pow(csc,powx)); int addy = ((int) Math.pow(csc,powy)); anim = 0; prevdirx = dirX; prevdiry = dirY; dirX = dirX + (addx * 20); dirY = dirY + (addy * 20); float tmp = dx; dx = (-1)*dy; dy = tmp; dir += 1; dir = dir%4; } if (keyCode == LEFT){ animT = false; animR = false; animL = true; double csc = -1; double powx1 = (dir+3)/2; double powy1 = (dir/2)+1; int addx1 = ((int) Math.pow(csc,powx1)); int addy1 = ((int) Math.pow(csc,powy1)); anim = 0; prevdirx = dirX; prevdiry = dirY; dirX = dirX + (addx1 * 20); dirY = dirY + (addy1 * 20); float tmp = dx; dx = dy; dy = (-1)*tmp; dir -= 1; dir = (dir+4)%4; anim = 0; } }
answer:Je vois que tu as des blocs de code pour la direction LEFT et RIGHT, mais pas pour la direction UP. Peut-être que tu as oublié d'ajouter la transformation de la position de la momie pour la direction UP. Dans le bloc de code pour la direction RIGHT, je vois que tu modifies les valeurs de dx et dy qui sont initialisés nulle part dans ton code. Je pense que cela peut influencer la position de la momie. Peux-tu vérifier si tu les as bien initialisés à quelque chose?
question:oui j'ai bien initialisé autre part, ce n'est pas le probleme puisque ma momie fonctionne parfaitement en tournant à gauche, UP est bien mis (if keycode == UP)
answer:D'accord, pourrais-tu s'il te plaît partager le code qui initialise la position de la momie, la rotation et la translation. Cela pourrait aider à comprendre le problème.
question:float mx = width/2+980; float my = height/2+1010; float dx = 0; float dy = -1; float mx1 = width/2+980; float my1 = height/2+1010; void draw(){ sphereDetail(6); translate(-1000,-1000); background(135,206,235); stroke (200,160,99); lights(); pushMatrix(); translate(mx,my,19); scale(0.05); rotateX(-1*HALF_PI); float angle = atan2(dy,dx); rotateY(-angle); shape(mummy); popMatrix();
answer:Merci pour le partage. Je pense que le problème se situe dans la translation de la momie lors de la touche UP. Dans le bloc de code pour la direction UP, tu modifies la position de la momie avec la variable `mx`. Cependant, dans la fonction `draw()`, tu as fait une translation de `-1000,-1000` avant de dessiner la momie. Cela signifie que la position de la momie doit être ajustée d'abord avec la translation, et ensuite avec `mx`. Je te propose de modifier la première ligne du bloc de code pour la direction UP comme suit : ``` posX += mov; dirX += mov; mx += mov; float posAdjustedX = mx - 1000; ``` Ensuite, dans la partie où tu dessines la momie, remplace la ligne `translate(mx,my,19);` par `translate(posAdjustedX, my, 19);`. Cette modification devrait ajuster correctement la position de la momie lors de la touche UP.