我目前正在处理一个基本的蛇形游戏,我希望蛇不会朝着它正在移动的相反方向移动。
每当我向相反方向按下时,蛇就会停止,但我希望游戏忽略按键。
if (keyCode == DOWN && direction != "up"){
if (frameCount % framespeed == 0){
ypos += speed;
}
direction = "down";
}
if (keyCode == UP && direction != "down"){
if (frameCount % framespeed == 0){
ypos -= speed;
}
direction = "up";
}
if (keyCode == RIGHT && direction != "left"){
if (frameCount % framespeed == 0){
xpos += speed;
}
direction = "right";
}
if (keyCode == LEFT && direction != "right"){
if (frameCount % framespeed == 0){
xpos -= speed;
}
direction = "left";
}
忽略frameCount
答案 0 :(得分:0)
首先,您不应使用==
或!=
来比较String
值。您需要使用equals()
功能。您已经提到过您在评论中尝试了此操作,但请更新您的帖子以添加新的MCVE。请注意,这应该不是你的完整蛇游戏。它应该是一个最小的例子。例如,想出一个简单的草图,在屏幕上显示方向(在文本中,而不是移动的东西)。使用箭头键更改方向。这样做就不会改变相反的方向。
你需要考虑的另一件事是,如果蛇朝上,用户可以向右按,然后按向下以反转蛇的方向。如果他们足够快,那么它将比你的帧速率快,并且蛇会反转方向。
有很多方法可以解决这个问题,Stack Overflow实际上并不是为一般的“我该怎么做”这类问题而设计的。这是针对具体的“我试过X,期待Y,但得到Z intsead”类型的问题。所以请break your problem down into smaller steps和debug your code,以便您准确了解正在发生的事情。如果您仍然无法理解,请在新问题帖子中发布MCVE,我们将从那里开始。祝你好运。
答案 1 :(得分:-2)
int [] x = new int [91];
int [] y = new int [91];
int dx = 1;
int dy = 0;
boolean moveX = false;
float ax = 350;
float ay = 250;
int points = 0;
void setup(){
大小(700,500);
smooth();
frameRate(2000);
x [0] = 20;
for(int i = 0; i <90; i ++){
x[i+1]=x[i]+1;
}
for(int i = 0; i <91; i ++){
y[i]=100;
}
}
void draw(){
background(#A3B8E0);
elli();
movement();
apple();
meet();
points();
}
void elli(){
填充(#59F046);
strokeWeight(1);
行程(#0B6200);
for(int i = 0; i <91; i = i + 15){
ellipse(x[i],y[i],30,30);
}
eyesnears();
for(int i = 0; i <90; i ++){
x[i]=x[i+1];
}
for(int i = 0; i <90; i ++){
y[i]=y[i+1];
}
x [90] = x [90] + dx;
y [90] = y [90] + dy;
}
void eyesnears(){
填充(#FCFC4A);
行程(#EAA800);
ellipse(x [90] -4,y [90] -5,7,7);
椭圆(x [90] + 6,y [90] -5,7,7);
ellipse(x [90] -8,y [90] -20,7,5);
椭圆(x [90] + 10,y [90] -20,7,5);
strokeWeight(3);
line(x [90] -6,y [90] -18,x [90] -4,y [90] -15);
line(x [90] + 7,y [90] -18,x [90] + 5,y [90] -15);
strokeWeight(1);
fill(#FFB08B);
arc(x [90] + 1,y [90] + 3,10,10,radians(0),radians(180));
}
无效运动(){
if(keyPressed){
if(keyCode == UP && moveX == false){
dy=-1;
dx=0;
moveX=true;
}
if(keyCode == DOWN && moveX == false){
dy=1;
dx=0;
moveX=true;
}
if(keyCode == LEFT && moveX == true){
dx=-1;
dy=0;
moveX=false;
}
if(keyCode == RIGHT && moveX == true){
dx=1;
dy=0;
moveX=false;
}
}
if(x [90] <= 14){
x[90]=width-15;
}
if(y [90] <= 14){
y[90]=height-15;
}
if(x [90]> = width-14){
x[90]=15;
}
if(y [90]> = height-14){
y[90]=15;
}
}
void apple(){
fill(#FF0000);
noStroke();
ellipse(ax,ay,40,40);
fill(#3BE802);
ellipse(ax-5,ay-25,16,10);
行程(#9D5100);
strokeWeight(5);
line(ax + 5,ay-25,ax,ay-14);
}
void Meet(){
if(abs(x [90] -ax)<33 && abs(y [90] -ay)<33){
ax = random(width);
ay = random(height); ax = constrain(ax,25,width-25);
ay = constrain(ay,25,height-25);
points = points + 1;
}
}
void points(){
textSize(25);
textAlign(CENTER);
填充(#9D5100);
text(“您的积分:” + points,600,25);
}