Java FX 移动形状
Java FX moving shapes
我想问一下您对如何解决我的问题有什么想法吗?我想要实现的是将事物朝一个方向移动,但将生成实例保持在设置的 y 位置
public class Balony extends Canvas {
Group root;
GraphicsContext gc;
Timeline t;
Scene scene;
int poz = 100;
Color farba=Color.RED;
Random rand = new Random();
int rychlost= rand.nextInt(20 - 2 + 1) + 2;
public Balony(Scene scene){
super(800,1000);
this.root = root;
this.scene = scene;
gc = this.getGraphicsContext2D();
setLayoutY(100);
t = new Timeline(new KeyFrame(Duration.millis(100),e->chod()));
t.setCycleCount(Animation.INDEFINITE);
t.play();
}
private void kresli(){
farebnost();
spawn();
gc.setFill(farba);
gc.fillOval(poz-40, scene.getHeight()-100, 80, 100);
gc.setFill(Color.BLACK);
gc.fillRect(poz, scene.getHeight(), 2, 100);
}
public void chod(){
kresli();
setLayoutY(getLayoutY()-rychlost);
}
public void spawn(){
int miesto = rand.nextInt((int) (scene.getWidth() - 50 + 1)) + 50;
poz = miesto;
}
public void farebnost(){
int colour= rand.nextInt(10 - 1 + 1) + 1;
switch (colour) {
case 1: farba = Color.RED; break;
case 2: farba = Color.GREEN; break;
case 3: farba = Color.BLUE; break;
case 4: farba = Color.YELLOW; break;
case 5: farba = Color.ORANGE; break;
case 6: farba = Color.BROWN; break;
case 7: farba = Color.YELLOWGREEN; break;
case 8: farba = Color.ORANGERED; break;
case 9: farba = Color.HOTPINK; break;
case 10: farba = Color.VIOLET; break;
}
}
这是我为解释我的问题而制作的一个简单程序,当新气球生成时,它们的 y 轴位置向上移动,但我想保持新实例向下移动 + 让它们以不同的速度向上移动(我相信这可以通过将整个移动过程移动到我的产卵空间来解决,所以这并不重要)。
- 您需要为单个气球引入一个 class 来存储它的位置、速度和颜色。我们称它为
Balon
.
- 在 class
Balony
中,您应该存储 List<Balon> balony;
- 在
chod()
方法的末尾,你应该遍历balony
,并更新每个Balon
的位置。
balon.setPoz(balon.getPoz() + balon.getRychlost());
- 其他方法(例如
kresli()
)必须相应更改,绘制气球列表,而不是单个气球
我想问一下您对如何解决我的问题有什么想法吗?我想要实现的是将事物朝一个方向移动,但将生成实例保持在设置的 y 位置
public class Balony extends Canvas {
Group root;
GraphicsContext gc;
Timeline t;
Scene scene;
int poz = 100;
Color farba=Color.RED;
Random rand = new Random();
int rychlost= rand.nextInt(20 - 2 + 1) + 2;
public Balony(Scene scene){
super(800,1000);
this.root = root;
this.scene = scene;
gc = this.getGraphicsContext2D();
setLayoutY(100);
t = new Timeline(new KeyFrame(Duration.millis(100),e->chod()));
t.setCycleCount(Animation.INDEFINITE);
t.play();
}
private void kresli(){
farebnost();
spawn();
gc.setFill(farba);
gc.fillOval(poz-40, scene.getHeight()-100, 80, 100);
gc.setFill(Color.BLACK);
gc.fillRect(poz, scene.getHeight(), 2, 100);
}
public void chod(){
kresli();
setLayoutY(getLayoutY()-rychlost);
}
public void spawn(){
int miesto = rand.nextInt((int) (scene.getWidth() - 50 + 1)) + 50;
poz = miesto;
}
public void farebnost(){
int colour= rand.nextInt(10 - 1 + 1) + 1;
switch (colour) {
case 1: farba = Color.RED; break;
case 2: farba = Color.GREEN; break;
case 3: farba = Color.BLUE; break;
case 4: farba = Color.YELLOW; break;
case 5: farba = Color.ORANGE; break;
case 6: farba = Color.BROWN; break;
case 7: farba = Color.YELLOWGREEN; break;
case 8: farba = Color.ORANGERED; break;
case 9: farba = Color.HOTPINK; break;
case 10: farba = Color.VIOLET; break;
}
}
这是我为解释我的问题而制作的一个简单程序,当新气球生成时,它们的 y 轴位置向上移动,但我想保持新实例向下移动 + 让它们以不同的速度向上移动(我相信这可以通过将整个移动过程移动到我的产卵空间来解决,所以这并不重要)。
- 您需要为单个气球引入一个 class 来存储它的位置、速度和颜色。我们称它为
Balon
. - 在 class
Balony
中,您应该存储List<Balon> balony;
- 在
chod()
方法的末尾,你应该遍历balony
,并更新每个Balon
的位置。balon.setPoz(balon.getPoz() + balon.getRychlost());
- 其他方法(例如
kresli()
)必须相应更改,绘制气球列表,而不是单个气球