2011-10-07 2 views
0

私のサイド・スクローラーでは、3つの背景をループし続けたいと思っています。ステージを通過するたびに、nextStage()という関数が呼び出され、次のバックグラウンドに移動します。クラスでは:背景の配列が必要ですか?

package com.erikbalen.game.rpg; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 
public class World extends JPanel implements ActionListener{ 

/** 
* 
*/ 
private static final long serialVersionUID = 2834816426699432121L; 
Player p1; 
Image background; 
Timer time; 

public World() { 
    p1 = new Dps(); 
    addKeyListener(new AL()); 
    setFocusable(true); 
    ImageIcon icon = new ImageIcon("C:\\Program Files (x86)\\EriksRPG\\Images\\Backgrounds\\background.png"); 
    background = icon.getImage(); 
    time = new Timer(5, this); 
    time.start(); 
} 

public void actionPerformed(ActionEvent e) { 
    p1.move(); 
    repaint(); 
} 

public void paint(Graphics g) { 
    super.paint(g); 
    Graphics g2d = (Graphics2D) g; 

    g2d.drawImage(background, 0, 0, null); 
    g2d.drawImage(p1.getImage(), p1.getX(), p1.getY(), null); 

} 

private class AL extends KeyAdapter { 
    public void keyReleased(KeyEvent e) { 
     p1.keyReleased(e); 
    } 

    public void keyPressed(KeyEvent e) { 
     p1.keyPressed(e); 
    }  
    }  
} 

は基本的に私は、私はこれらの3つのファイルをロードし、背景と呼ばれる画像の配列を作成し、ネクストステージ(と呼ばれる方法)ことを作ることができる方法を知りたいloads background[stage] and if stage > 2 stage = 0

答えて

1

一つの可能​​な解決策:

メーク「背景」の3つの要素

Image[] background = new Image[3]; 

のアレイは、三枚の背景画像を背景に一つずつロード[0]、背景[1]と背景[2]。

進めるときに、新しいプライベート変数、おそらくと呼ばれる段階、および増分を作成します。

private int stage = 0; 

public void nextStage() { stage++; } 

最終的には、塗料中の()、ステージの値に応じて、必要な背景を描く:

g2d.drawImage(background[stage % 3], 0, 0, null); 
+0

ありがとうございます!私はちょっとキンクしていましたが、nextStageを静的メソッドにしてプレイヤークラスの内側からアクセスできるようにしたので修正しました。 –

+0

問題には関係ありませんが、ゲームオブジェクトを格納するメンバ変数をプレーヤに与えることを考えてください(コンストラクタに渡してください)。一度に複数の段階を経ることはないでしょうから、この場合はそれほど重要ではありませんが、一般的には、「可視性を高めるためには静的にする」という練習で問題が発生します(例:ifプレイヤーにシールド変数を与え、敵がそれにアクセスできるように静的にした後、2人のゲームにした場合、2人のプレイヤーがそれぞれ自分のものではなく同じシールドを共有していることがわかります) – Ben

関連する問題