2016-10-07 12 views
0

私は、泡が画面の周りを跳ね返り、ポップするためのポイントを取得してから、再びスポーンするアプリケーションを作成しています。独立して制御できる同一のImageViewをプログラムで作成する

各バブルは、画面上の動きを制御するために使用される速度と方向の整数を除き、まったく同じです。

今のところ、私は "バブル"と呼ばれる単一のImageViewを持っています。次に、私が作成したメソッドrandoms()を実行します。

randoms()のためのコード:

public void randoms(){ 

     ySpeedRand = new Random(); 
     xSpeedRand = new Random(); 
     yPolarityRand = new Random(); 
     xPolarityRand = new Random(); 

     ySpeed = ySpeedRand.nextInt(5) + 4; 
     xSpeed = xSpeedRand.nextInt(5) + 4; 
     yPolarity = yPolarityRand.nextInt(3) + 1; 
     xPolarity = xPolarityRand.nextInt(3) + 1; 

     if (xPolarity == 1){ 
      xSpeed*=-1; 
     } 
     if (yPolarity == 2){ 
      ySpeed*=-1; 
     } 

    } 

それから私は、バブルをタップした時にチェックし、私はそれが見えないよう、(randomsを再実行)ブロック、およびそれが見えるようにリスナーを持っています。簡単にあり

 final Handler checkHandler = new Handler(); 
     Runnable check = new Runnable() { 
      @Override 
      public void run() { 

       if (bubble.getX()>SCREEN_WIDTH-bubble.getWidth()/2){xSpeed*=-1;} 
       if (bubble.getX()<0){xSpeed*=-1;} 
       if (bubble.getY()>SCREEN_HEIGHT-bubble.getHeight()){ySpeed*=-1;} 
       if (bubble.getY()<bubble.getHeight()/2+barHeight+actionBorder.getHeight()){ySpeed*=-1;} 

       handler.postDelayed(this, 50); 

      } 
     };checkHandler.post(check); 

これは、気泡の位置を制御するハンドラです:

final Handler handler = new Handler(); 
    Runnable run = new Runnable() { 
     @Override 
     public void run() { 

      bubble.setX(bubble.getX()+xSpeed); 
      bubble.setY(bubble.getY()+ySpeed); 
      handler.postDelayed(this, 5); 

     } 
    };handler.post(run); 

は、そして私は、バブルが画面上に残っているかどうかを確認するために、このコードを使用します単純にこのシステムを拡張してメソッドcreatebubble()を呼び出し、新しいバブルに古いものと同じプロパティを仮定させることができますが、新しく生成されたランダム性があります。

私は100%詰まっていて、何も見つかりません。どんな助けもありがとうございます!

答えて

1

あなたの質問を読んで少し混乱しました。なぜあなたがImageViewを使用しようとしているのか分かりません。このように、あなたの目標に行く:

  • がポップすると
  • は、気泡が
  • は気泡が画面の外に移動し、画面上のランダムな空間に移動させなければならないポップすることができ、気泡を生成しますゲームを作成し、方向を逆転させる。

私は、少なくとも次のクラスになるだろう:

  • あなたのmain()メソッドが保存され、extends Canvasあなたのゲームループの実行
  • ウィンドウ、前記あなたれるランチャーJFrame
  • 制御、ここでは物理がLauncherがループを完了するたびに計算されます
  • エンティティ、抽象Javaオブジェクト
  • バブル

はここでゲームループを作るための一つの方法です:http://www.java-gaming.org/index.php?topic=24220.0

は、ここでのJFrameを作成する方法の例です:

import java.awt.Canvas; 
import javax.swing.JFrame; 

public class Window extends Canvas{ 
    public Window(Launcher launcher){ 
     JFrame frame = new JFrame("Title"); 
     frame.setSize(700,500); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null);; 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(launcher); 
     frame.setVisible(true); 
     launcher.setFrame(frame); 
    } 
} 

気泡を追跡するために、私は宣言し、 ControlクラスのLinkedList<>これのいずれかが意味をなさない場合

public class Bubble extends Entity{ 
    public double x = 0; 
    public double y = 0; 

    public Bubble(int x, int y){ 
     super(x,y); 
    } 

    public void tick(){ 
     //Physics go here 
    } 
    public void render(){ 
     //Graphics functions go here 
    } 
} 

:Entityクラスで

public class Control{ 
    public LinkedList<Entity> entity = new LinkedList<Entity>(); 
    Random rand = new Random(); 

    public Control(){ 
     //You will have to define these constants in the Launcher class 
     entity.add(
      rand.nextInt(Launcher.WINDOW_WIDTH), 
      rand.nextInt(Launcher.WINDOW_HEIGHT) 
     ); 
    } 

    //Called every time Launcher completes a game loop 
    tick(){ 
     for(int i=0; i<entity.size(); i++){ 
      entity.get(i).tick(); 
     } 
    } 
} 

:バブルクラスで

public abstract class Entity{ 
    protected double x; 
    protected double y; 

    public Entity(int x, int y){ 
     this.x = x; 
     this.y = y; 
    } 

    public abstract void tick(); 
    public abstract void render(Graphics g); 
    //Getters and setters here ... 
} 

作成するには、コントロールでは、このような何かを実行して泡私に教えてください。私はもっと詳細に説明し、タスクの単純さを考慮してプログラム全体を作成するまで行っていきます。

関連する問題