2017-03-04 62 views
1

我有一個動態圖像作爲背景火箭穿過課堂。處理

PImage background; 
int x=0; //global variable background location 
rocket Rocket; 

void setup(){ 
size(800,400); 
background = loadImage("spaceBackground.jpg"); 
background.resize(width,height); 
Rocket = new rocket(); 
} 

void draw() 
{ 
image(background, x, 0); //draw background twice adjacent 
image(background, x+background.width, 0); 
x -=4; 
if(x == -background.width) 
x=0; //wrap background 
Rocket.defender(); 
Rocket.move(); 
} 

在不同的類我試圖讓火箭上下移動

class rocket { 
    float x; 
    float y; 
    float speedy; 
    boolean up; 
    boolean down; 

rocket(){ 
    x = 50; 
    y = 200; 
    speedy = 3; 
} 

void move() { 
if(up) 
{ 
    y = y - speedy; 
} 
if(down) 
{ 
    y = y + speedy; 
} 
} 

void defender(){ 
fill(255,0,0); 
rect(x,y,50,20); 
triangle(x+50,y,x+50,y+20,x+60,y+10); 
fill(0,0,100); 
rect(x,y-10,20,10); 
} 

void keyPressed(){ 
    if(keyCode == UP) 
    { 
    up = true; 
    } 
    if(keyCode == DOWN) 
    { 
    down = true; 
    } 
} 

void keyReleased(){ 
    if(keyCode == UP) 
    { 
    up = false; 
    } 
    if(keyCode == DOWN) 
    { 
    down = false; 
    } 
} 
} 

火箭將顯示,但是不會動。我嘗試了我所知道的一切,但沒有任何結果我也嘗試過火箭課,就像一個項目本身一樣,火箭也在移動,所以它必須是課堂上的東西。我對編碼相當陌生,所以請記住這一點,並提前致謝。

回答

0

keyPressed()keyReleased()功能(和任何其他事件功能)需要在草圖級別,而不是在另一個類別內。如果他們在另一個班級內,Processing不知道如何找到他們。

所以,你需要做的是移動keyPressed()keyReleased()功能草圖,然後調用您的Rocket類函數(類名稱應以大寫字母開頭,順便說一句),類似於你怎麼」請從草圖級draw()函數重新調用rocket.defender()rocket.move()(變量名應以小寫字母開頭)。

+0

另外,你知道我怎麼能限制火箭,所以它不會離開屏幕,而我上下移動它? –

+0

@AlexandrosConstantinides當然,你可以使用if語句來限制你移動火箭的時間。我已經在Processing available [here](http://happycoding.io/tutorials/processing/animation)中編寫了動畫教程,其中包括將動畫限制在屏幕內部。如果仍然無法正常工作,請在新問題中發佈[mcve](不是您的整個草圖,只是一個可以用箭頭鍵移動的矩形框),我們會從那裏開始。祝你好運。 –