gpt4 book ai didi

java Swing : modify rectangle without creating a new one

转载 作者:行者123 更新时间:2023-12-01 11:54:43 25 4
gpt4 key购买 nike

我正在使用 swing,但遇到了问题。我正在夺旗,当蓝队被红方的红色玩家击中时,蓝方玩家应该在自己的一方重置。我的问题是蓝色玩家在自己的一侧重生,但不会从红色一侧消失,所以我最终得到两个蓝色方 block 。我认为这是因为我正在通过以下方式重置蓝色播放器

bluePlayer=new Rectangle(coords)

所以我在保留旧矩形的同时创建一个新矩形。我尝试过修改语法,例如

bluePlayer=(coords);

bluePlayer=Rectangle(coords);

但两者都给我错误。我认为这类似于在声明之后更改 int 'example' 的值,如下所示:

int example=10;
example=5;

但对我来说,它并没有改变 example 的值,而是创建了第二个整数,也称为 example。我应该补充一点,当我使用箭头键移动蓝色方 block 时,我可以移动接触红色方 block 的蓝色方 block ,当我将蓝色方 block 移离红色方 block (它们不再接触)时,第二个蓝色方 block 消失。

这是我重置蓝色方 block 的代码:

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

以下是一些屏幕截图,应该有助于解释我的问题:

蓝色方 block 和红色方 block 位于相对两侧且不接触,这里没有问题。

/image/vtmVJ.png

蓝色方 block 位于红色方 block 的一侧并与红色方 block 相接触,并且蓝色方 block 的一侧还有另一个蓝色方 block 。

/image/780ZZ.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();
}

最佳答案

您定义并绘制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);
}

请记住,绘画就像在 Canvas 上绘画一样,它是累积的。

一般来说,绘画是为了绘画而存在,不应该包含任何与绘画当前状态无关的逻辑。

假设您有某种更新循环或周期,您应该计算其中的逻辑并简单地绘制状态。这两个操作应该分开完成...

关于java Swing : modify rectangle without creating a new one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28533704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com