我正在使用挥杆,我遇到了问题。我正在抓住旗帜,当蓝队被红色球员击中时,蓝色球员应该自己重置。我的问题是蓝色球员在自己身边重生,但不会从红色方面消失,所以我最终得到两个蓝色方块。我想这是因为我正在通过
重置蓝色播放器bluePlayer=new Rectangle(coords)
所以我在离开旧矩形的同时创建了一个新矩形。我尝试修改语法,例如
bluePlayer=(coords);
或
bluePlayer=Rectangle(coords);
但两个都给我错误。我认为这类似于改变其值,例如,int'例如'在宣布之后,就像这样:
int example=10;
example=5;
但对我而言,它不是改变示例的价值,而是创建第二个整数,也称为示例。我应该补充一点,当我使用箭头键移动蓝色方块时,我可以移动触摸红色方块的蓝色方块,当我将蓝色方块移离红色方块时(他们不会)第二个蓝色正方形消失了。
以下是重置蓝色方块的代码:
if(bluePlayer.intersects(leftSide) && redPlayer.intersects(bluePlayer)){
bluePlayer=new Rectangle(1100, 300, 50, 50);
g.setColor(Color.BLUE);
g.fillRect(bluePlayer.x, bluePlayer.y, bluePlayer.width, bluePlayer.height);
}
以下是一些有助于解释我的问题的截图:
蓝色正方形和红色正方形在两侧并且没有接触,这里没有问题。
http://i.imgur.com/WnbwUDA.png
蓝色方块位于红色方块的旁边,正在触及红色方块,蓝色方块旁边还有另一个蓝色方块。
http://i.imgur.com/0tMUg9y.png
这是我在paintComponent方法中的代码。请注意,上面我称之为bluePlayer的实际上在代码中命名为player2。我知道我的代码很乱,我仍然需要清理它。
public void paintComponent(Graphics g){
Rectangle leftSide=new Rectangle(0, 0, 600, 700);
g.setColor(Color.PINK);
g.fillRect(leftSide.x, leftSide.y, leftSide.width, leftSide.height);
Rectangle rightSide=new Rectangle(600, 0, 600, 700);
g.setColor(Color.CYAN);
g.fillRect(rightSide.x, rightSide.y, rightSide.width, rightSide.height);
g.setColor(Color.RED);
Rectangle player1=new Rectangle(player1X, player1Y, 50, 50);
g.fillRect(player1.x, player1.y, player1.width, player1.height);
g.setColor(Color.BLUE);
Rectangle player2=new Rectangle(player2X, player2Y, 50, 50);
g.fillRect(player2.x, player2.y, player2.width, player2.height);
Rectangle redFlag=new Rectangle(150, 313, 25, 25);
if(blueHasRedFlag==false){
g.setColor(Color.RED);
g.fillRect(redFlag.x, redFlag.y, redFlag.width, redFlag.height);
}
if(player2.intersects(redFlag)){
blueHasRedFlag=true;
player1=new Rectangle(player1X, player1Y, 75, 75);
}
if(player2.intersects(leftSide) && player1.intersects(player2)){
player2=new Rectangle(1100, 300, 50, 50);
g.setColor(Color.BLUE);
g.fillRect(player2.x, player2.y, player2.width, player2.height);
}
repaint();
}
答案 0 :(得分:1)
您定义并绘制player2
...
Rectangle player2=new Rectangle(player2X, player2Y, 50, 50);
g.fillRect(player2.x, player2.y, player2.width, player2.height);
然后,您再次测试player2
的位置并再次绘制player2
的新位置......
if(player2.intersects(leftSide) && player1.intersects(player2)){
player2=new Rectangle(1100, 300, 50, 50);
g.setColor(Color.BLUE);
g.fillRect(player2.x, player2.y, player2.width, player2.height);
}
请记住,绘画就像在画布上画画一样,它是累积的。
一般来说,绘画是用于绘画的,不应该包含任何与绘制当前状态无关的逻辑。
假设您有某种更新循环或循环,您应该计算其中的逻辑并简单地绘制状态。这两项操作应该分开进行......