2017-12-06 7 views
0

ホープ誰もがこのリンクでの基本的なLibgdxゲームを知っている:簡単なゲームでLibGdx -simpleゲーム

https://github.com/libgdx/libgdx/wiki/A-simple-game

を、雨の滴はそれが一つであり、上からランダムに落ちていますタイプ。 私の場合、ドロップと同じものを実装したいと思います。違いは、4種類のドロップがあります。別のオブジェクトと衝突すると、4つの異なる特性が示されるはずです。要するに、オブジェクトと配列を持つDropクラスを作成し、ドロップオブジェクトも生成できます。

Drop drop=new Drop(); 
    private Array<Drop> drops=new Array<Drop>(); 

しかし、この場合、ドロップの個別属性を定義する場合はどうすればよいですか? ドロップオブジェクトを4つのタイプに分類します。例えば、黄色、赤、緑、青の色が異なる。また、4種類の滴が上からランダムに落ちるはずです。

どのようにして、どのようにこのような概念を実装する必要がありますか?

私はこれについていくつかのアイデアを得ると非常に役に立ちます。

編集:

私は抽象クラスのドロップを持っていると.Iはconstructor.Becauseグラフィックスで質感や四角形を渡していない午前中にそれを割り当てることを計画しています右now.Iプロジェクトでは使用できません今のところ、私はshaperendererでそれをやっています。

私はすべてのオブジェクトを作成するために使用される私のObjectFactoryクラスの三つの異なる色の滴のための()メソッドを作成してい:

public YellowDrop createYellow(){ 
    YellowDrop yellow = new YellowDrop(); 
    yellow.setSize(100f,100f); 
    yellow.setPosition(MathUtils.random(0, 800),1280); 
    return yellow; 
} 
public RedDrop createRed(){ 
    RedDrop red = new RedDrop(); 
    red.setSize(100f,100f); 
    red.setPosition(MathUtils.random(0, 800),1280); 
    return red; 
} 
public GreenDrop createGreen(){ 
    GreenDrop green = new GreenDrop(); 
    green.setSize(100f,100f); 
    green.setPosition(MathUtils.random(0, 800),1280); 
    return green; 
} 

をそして私にとっては、このような私が書かれてcreateRandomDrop()コード(、あなたのコードされますthough.Howを混乱私はそこの方法でコロン記号が、私はそれを使ったことがないことを使用することができます)

プライベートブロックcreateRandomDrop(){ スイッチ(MathUtils.random(0、3)){ 場合0:?。 システム.out.println( "000000"); return objectFactory.createYellow(); ケース1: return objectFactory.createGreen();

case 2 : return objectFactory.createRed(); 
default: 
    return objectFactory.createGreen(); 

}} は、ここで私は、個々のドロップオブジェクトを返す方法については混乱しています。 私はこのような呼び出しが書かれているにもかかわらず:私はすべての配列要素のためのshaperenderer描いています最後に

if(TimeUtils.nanoTime() - lastDropTime > 1000000000) { 
    drops.add(createRandomDrop()); 
    } 

private void updateBlocks(float delta) { 

    Iterator<Drop> iter = drops.iterator(); 
     while(iter.hasNext()) { 
     Drop b = iter.next(); 
     b.update(delta);//moving drop from top to bottom in update() 
     if(b.getY()<0) iter.remove(); 
     } 
    // System.out.println(drops.size); 

}

for (Drop b : drops) { 
    b.drawDebug(shapeRenderer);} 

このdrawdebugを()ドロップクラスでありますそれを上書きしています。

public void drawDebug(ShapeRenderer shapeRenderer) { 
    shapeRenderer.setColor(Color.YELLOW); 
    shapeRenderer.rect(collisionRectangle.x, collisionRectangle.y, 
    collisionRectangle.width, 
      collisionRectangle.height); 
} 

問題はあまりにも多いドロップです作成され、重複している。スイッチのケースが問題を引き起こすかもしれない。

+0

行く。 – Niranjana

答えて

3

あなたの問題は何ですか?これは簡単です。

Dropクラスの4つの子を作成します。 yellowDrop、greenDropなど...そして、すべての子に対して同じ機能を実装するDropクラスでcollide()メソッドを作成します。

このような何か:

abstract class Drop { 

    abstract Texture tex; 
    abstract Rectangle rect; 

    Drop(Texture tex, Rectangle rect){ 
     // initialize values here 
    } 

    void showCollideAnimation(){ // example. here you can create your own void to show different characteristics. 
      tex.blabla()  
    } 

    void collide(){ 
      showCollideAnimation(); 
    } 

    // also draw, update methods etc... Hope you got that they should do functionality same for all children 
} 

そしてshowCollideAnimationメソッドをオーバーライドする子を作成します。

class GreenDrop extends Drop { 

     @override 
     void showCollideAnimation(){ 
      ....  // here you pass effect for Green child 
     } 
} 

あなただけのドロップ

Drop createRandomDrop(Rectangle rect): Drop { 

      switch (MathUtils.random(0, 3)) { 
       case 0 : return new YellowDrop(Texture("pathToYellowTexture"), rect) break; 
       case 1 : return new GreenDrop(Texture("pathToGreenTexture"), rect) break; 
       // etc. 
      } 

} 

今、あなたはドロップのArrayListのを埋めることができますを返す関数を作成することができ、ランダムな子を選択すること。ダウン少なくとも私は私が間違っていたかを理解し、私のquestion.Iを向上させることができること。だからコメントを残すことができ投票した人は心から答えを取得しようとどのようにそれは単にもし誰かダウン投票を感じています

private ArrayList<Drop> drops = new ArrayList<Drop>(); 

in render method: 

if(TimeUtils.nanoTime() - lastDropTime > 1000000000) { 
     drops.add(createRandomDrop(Texture(""), Rectangle())); // specify texture and rectangle yourself 
} 
+0

しかし、これらすべての継承された子クラスオブジェクトを含むDrop型の動的配列を作成する方法はありますか? – Niranjana

+0

子クラスオブジェクトを配列に追加する方法を指定してください。使用したことがなく、多くのアイデアがありません。とても役に立ちます。 – Niranjana

+0

私はこれを試しましたが、もう一度スタックしました。子オブジェクトを作成した後、ドロップ配列を反復する方法は?そのオブジェクトを作成する必要があります。 – Niranjana

関連する問題