以编程方式创建可以独立控制的相同ImageView

时间:2016-10-07 01:09:59

标签: java android imageview game-physics

我正在创建一个应用程序,其中气泡在屏幕周围反弹,你获得点弹出它们,然后它们重新产生。

除了用于控制屏幕周围运动的速度和方向整数外,每个气泡都完全相同。

截至目前,我有一个名为" bubble"的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 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);

我使用此代码检查屏幕上是否仍有气泡:

        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);

是否有一种简单的方法可以简单地扩展这个系统,这样我就可以调用一个方法createbubble(),然后让新的气泡假定与旧的气泡具有确切的属性,但是使用新生成的random?

我100%陷入困境,我无法找到任何东西。非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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<>。要创建气泡,请在Control中运行:

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();
        }
    }
}

在Entity类中:

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 ...
}

在泡泡课中:

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
    }
}

如果其中任何一个没有意义,请告诉我,我会更详细地解释,甚至可以考虑到任务的简单性,为您制作整个程序。