im试图制作一个8拼图游戏,我的问题是,当特定图像的x位置的x1值(比如说70)增加到170,然后它将减少,直到再次达到70,但这种减少不起作用,图像不再移动到其原始位置,只会抖动。为什么会发生这种情况。为了澄清所有这些东西,你可以检查我下面的代码:
run.java
public class run extends Applet implements Runnable{
public Image im;
public int x1=70, y1=70;
public int x2=170, y2=70;
public int x3=270, y3=70;
public int x4=70, y4=170;
public int x5=170, y5=170;
public int x6=270, y6=170;
public int x7=70, y7=270;
public int x8=170, y8=270;
public int x9=270, y9=270;
public Image offscreen;
public Graphics d;
public BufferedImage container;
public BufferedImage[] tile = new BufferedImage[10];
private File loadThis;
public void combi1(){
if(x1<170 && x1>=70){
x1+=1; y2+=1; x5-=1; y4-=1;
return;
}
if(x1>=70){
x1-=1; y2-=1; x5+=1; y4+=1;
return;
}
}
public void run(){
try{
URI imageurl = getClass().getResource("container.png").toURI();
loadThis = new File(imageurl);
container = ImageIO.read(loadThis);
for(int i=0; i<10; i++){
if(i>=1){
URI tileurl = getClass().getResource("tile" + i +".png").toURI();
loadThis = new File(tileurl);
tile[i] = ImageIO.read(loadThis);
}
}
}catch (IOException e1){
e1.printStackTrace();
} catch (URISyntaxException e) {
System.out.println(e);
}
while(true){
combi1();
repaint();
try{
Thread.sleep(2);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
AI项目.java
public class AIprojects extends run{
public void init(){
setSize(450,450);
Thread th = new Thread(this);
th.start();
offscreen = createImage(450,450);
d = offscreen.getGraphics();
}
public void paint(Graphics g){
d.setColor(Color.black);
d.fillRect(0, 0, 450, 450);
d.drawImage(container, 52, 52,340,340, this);
d.drawImage(tile[9], x9, y9, this);
d.drawImage(tile[1], x1, y1, this);
d.drawImage(tile[2], x2, y2, this);
d.drawImage(tile[3], x3, y3, this);
d.drawImage(tile[4], x4, y4, this);
d.drawImage(tile[5], x5, y5, this);
d.drawImage(tile[6], x6, y6, this);
d.drawImage(tile[7], x7, y7, this);
d.drawImage(tile[8], x8, y8, this);
g.drawImage(offscreen, 0, 0, this);
}
public void update(Graphics g){
paint(g);
}
}
这段代码不是我现在拥有的实际代码,但我把它发布在这里是为了让所有关于我的问题的事情都清楚。提前感谢
给定
if(x1<170 && x1>=70){
x1+=1; y2+=1; x5-=1; y4-=1;
return;
}
if(x1>=70){
x1-=1; y2-=1; x5+=1; y4+=1;
return;
}
当x1
达到170时会发生什么?你减去1。下次你进来的时候,由于x1
是169,你加1,就变成了170。依此类推,不限。
我认为您需要一个变量direction
,它是1或-1。当您达到170或70时,反转direction
的值。在所有情况下,使用direction
来更改x1
,从而
x1 += direction;