2017-03-04 3 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はそれらを見つける方法を知らない。

だから、何をする必要がある「、(クラス名はところで、大文字で始める必要があります)あなたのRocketクラスに関数を呼び出す、あなたのと同じようにスケッチにkeyPressed()keyReleased()機能を移動し、ありますスケッチレベルdraw()関数からrocket.defender()rocket.move()(変数名は小文字で始まるはずです)を呼び出してください。

+0

また、ロケットをどのように制限して、画面を上下に動かすことができないのか知っていますか? –

+0

@AlexandrosConstantinidesもちろん、あなたはロケットを動かす時に制限する 'if'ステートメントを使うことができます。私はアニメーションに関するチュートリアルを、Processing available [here](http://happycoding.io/tutorials/processing/animation)に書いています。このチュートリアルでは、アニメーションを画面内にとどまるように制限しています。それでも問題が解決しない場合は、[mcve](新しいスケッチではなく、矢印キーで動く単一の長方形)を新しい質問に投稿してください。がんばろう。 –

関連する問題