Processing封装drawPlayer绘制飞船后按键移动功能失效如何解决
问题原因
- 你在
draw()函数中调用drawPlayer()时传入了固定的50,50坐标值,没有使用按键逻辑修改的全局x、y变量,所以不管怎么按按键,飞船永远被绘制在固定位置,看起来就像移动失效了。 - 额外注意:你自定义的
drawPlayer()函数的形参也叫x、y,属于函数内的局部变量,和全局的x、y重名,虽然不影响功能,但建议修改形参名避免后续混淆。
修复方案
只需要修改draw()函数中的调用逻辑,把固定参数换成全局的x、y即可,以下是完整可运行的修正代码:
float x=0; float y=0; void setup(){ size(500,500); } void draw(){ background(0); // 把固定的50,50替换为全局变量x、y drawPlayer(x,y); } // 优化:修改形参名避免和全局变量重名 void drawPlayer(float playerX, float playerY){ stroke(0); strokeWeight(2); fill(#F5F5F5); circle(playerX,playerY,50); fill(0); circle(playerX,playerY,20); triangle(playerX,playerY,playerX-8,playerY+25,playerX+8,playerY+25); fill(105,105,105); rect(playerX-20,playerY+20,40,5); rect(playerX-25,playerY+25,50,15); fill(255,255,0); triangle(playerX-25,playerY+25,playerX-40,playerY+35,playerX-25,playerY+40); triangle(playerX+25,playerY+25,playerX+40,playerY+35,playerX+25,playerY+40); fill(#F5F5F5); arc(playerX,playerY+40,50,20,0,PI,CHORD); } void keyPressed(){ if(key == 's') y = y + 10; if(key =='w') y = y - 10; if(key =='a') x= x - 5; if(key =='d') x= x + 5; }
内容的提问来源于stack exchange,提问作者Thanh Phuong Pham
相关产品推荐
相关产品推荐

