我正在创建一个应用程序,其中气泡在屏幕周围反弹,你获得点弹出它们,然后它们重新产生。
除了用于控制屏幕周围运动的速度和方向整数外,每个气泡都完全相同。
截至目前,我有一个名为" 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%陷入困境,我无法找到任何东西。非常感谢任何帮助!
答案 0 :(得分:1)
阅读你的问题我有点困惑。不确定为什么要尝试使用ImageView
。以此为目标:
我至少会做以下课程:
extends Canvas
,其中您设置了JFrame
以下是制作游戏循环的一种方法: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
}
}
如果其中任何一个没有意义,请告诉我,我会更详细地解释,甚至可以考虑到任务的简单性,为您制作整个程序。