#function #processing
Вопрос:
Я пытаюсь создать простую космическую игру, используя обработку. Я нарисовал космический корабль и добавил к нему движения с помощью клавиш A, D, W, S. Вот код:
float shipX=0;
float shipY=0;
void setup(){
size(500,500);
}
void draw(){
background(0);
stroke(0); //spaceship
strokeWeight(2);
fill(#F5F5F5);
circle(shipX,shipY,50);
fill(0);
circle(shipX,shipY,20);
triangle(shipX,shipY,shipX-8,shipY 25,shipX 8,shipY 25);
fill(105,105,105);
rect(shipX-20,shipY 20,40,5);
rect(shipX-25,shipY 25,50,15);
fill(255,255,0);
triangle(shipX-25,shipY 25,shipX-40,shipY 35,shipX-25,shipY 40);
triangle(shipX 25,shipY 25,shipX 40,shipY 35,shipX 25,shipY 40);
fill(#F5F5F5);
arc(shipX,shipY 40,50,20,0,PI, CHORD);
}
void keyPressed(){ //spaceship movement
if(key == 's')
shipY = shipY 10;
if(key=='w')
shipY = shipY-10;
if(key =='a')
shipX= shipX-5;
if(key =='d')
shipX= shipX 5;
}
Позже я хочу позвонить void drawPlayer(float x, float y)
, чтобы вместо этого нарисовать корабль.
Однако после розыгрыша игрока путем вызова drawPlayer(0,0);
void draw()
, движения больше не работают. Вот новый блок кода:
float x=0;
float y=0;
void setup(){
size(500,500);
}
void draw(){
background(0);
drawPlayer(50,50);
}
void drawPlayer(float x, float y){
stroke(0); //spaceship
strokeWeight(2);
fill(#F5F5F5);
circle(x,y,50);
fill(0);
circle(x,y,20);
triangle(x,y,x-8,y 25,x 8,y 25);
fill(105,105,105);
rect(x-20,y 20,40,5);
rect(x-25,y 25,50,15);
fill(255,255,0);
triangle(x-25,y 25,x-40,y 35,x-25,y 40);
triangle(x 25,y 25,x 40,y 35,x 25,y 40);
fill(#F5F5F5);
arc(x,y 40,50,20,0,PI,CHORD);
}
void keyPressed(){ //spaceship movement
if(key == 's')
y = y 10;
if(key =='w')
y = y - 10;
if(key =='a')
x= x - 5;
if(key =='d')
x= x 5;
}
Я новичок в программировании, поэтому все становится запутанным. Это потому, что глобальная переменная x, y не вызывается? Я попытался включить функцию перемещения void drawPlayer(float x, float y)
, но корабль все еще не может двигаться. Было бы здорово, если бы кто-нибудь мог мне в этом помочь. Спасибо!
Ответ №1:
Эта строка:
drawPlayer(50,50);
отправляет 50
, 50
как значения для x
и y
в вашей drawPlayer
функции. Таким образом, независимо от того, на какие глобальные значения x и y изменяются нажатием клавиши, значения внутри вашей функции всегда равны 50,50, поэтому корабль никогда не движется.
Просто измените его на
drawPlayer(x,y);
чтобы отправить глобальные значения в функцию, и она должна работать.
Чтобы избежать путаницы, вы можете изменить имена глобальных переменных, чтобы они отличались от локальных переменных, которые используются внутри функции:
float shipX=0;
float shipY=0;
void setup(){
size(500,500);
}
void draw(){
background(0);
drawPlayer(shipX, shipY);
}
void drawPlayer(float x, float y){
stroke(0); //spaceship
strokeWeight(2);
fill(#F5F5F5);
circle(x,y,50);
fill(0);
circle(x,y,20);
triangle(x,y,x-8,y 25,x 8,y 25);
fill(105,105,105);
rect(x-20,y 20,40,5);
rect(x-25,y 25,50,15);
fill(255,255,0);
triangle(x-25,y 25,x-40,y 35,x-25,y 40);
triangle(x 25,y 25,x 40,y 35,x 25,y 40);
fill(#F5F5F5);
arc(x,y 40,50,20,0,PI,CHORD);
}
void keyPressed(){ //spaceship movement
if(key == 's')
shipY = shipY 10;
if(key =='w')
shipY = shipY - 10;
if(key =='a')
shipX = shipX - 5;
if(key =='d')
shipX = shipX 5;
}