我正在学校用Java制作Atari Arkanoid的演示版。一旦使用布尔值击中,我将如何制作消失的砖块?它必须先碰撞然后消失而不再出现。
//brickbase
import java.awt.*;
public class Brickbase
{
private int myX; // x and y coordinates of center
private int myY;
private int myXWidth;
private int myYWidth;
private Color myColor;
public Brickbase(int x, int y, int xWidth, int yWidth, Color c)
{
myX = x;
myY = y;
myXWidth = xWidth;
myYWidth = yWidth;
myColor = c;
}
// accessor methods
public int getX()
{
return myX;
}
public int getY()
{
return myY;
}
public int getXWidth()
{
return myXWidth;
}
public int getYWidth()
{
return myYWidth;
}
public Color getColor()
{
return myColor;
}
// modifier methods
public void setX(int x)
{
myX= x;
}
public void setXWidth(int xWidth)
{
myXWidth = xWidth;
}
public void setY(int y)
{
myY=y;
}
public void setYWidth(int yWidth)
{
myYWidth =yWidth;
}
public void jump(int rightEdge, int bottomEdge)
{
myX= rightEdge;
myY= bottomEdge;
}
public void setColor(java.awt.Color c)
{
myColor = c;
}
// instance methods
public void draw(Graphics myBuffer)
{
myBuffer.setColor(getColor());
myBuffer.fillRect(getX(), getY(), getXWidth(), getYWidth());
}
public boolean inBrickbase(arkBall ark)
{
for(int x = getX(); x <= getX() + getXWidth(); x++) //starts at upper left corner(x,y)
for(int y = getY(); y <= getY() + getYWidth(); y++)
if(distance(x, y, ark.getX(), ark.getY()) <= ark.getRadius() ) //checks every point on the bumper
return true;
return false;
}
private double distance(double x1, double y1, double x2, double y2)
{
return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
}
}
当名为ark的球击中砖块时,它会反弹,但砖块不会受到影响。我知道我应该使用布尔值,但我该怎么办?我的老师要求我们做研究,但我的Java教科书没有包含布尔值或图形,因为它不是AP课程的一部分。可以使用Arkanoid的示例代码,但它们太复杂,有时无法应用于我的代码。
答案 0 :(得分:1)
所以,你需要(通常称为a)&#34; flag&#34;
这个&#34;标志的目的&#34;是管理一个州,并提供一种方法,通过它你可以检查该特定的状态。
在这种情况下,我们希望在满足某些条件时使砖块不可见。
所以,让我们首先介绍我们的&#34;标志&#34;作为Brickbase
类的实例字段......
public class Brickbase {
private boolean visible = true;
甜蜜,我们知道有办法确定砖是否可见,并可能改变这种状态。
所以,显然,我们可能要做的第一件事就是根据&#34; flag&#34;的状态确定是否应该绘制砖块,可能是......
public void draw(Graphics myBuffer) {
if (visible) {
myBuffer.setColor(getColor());
myBuffer.fillRect(getX(), getY(), getXWidth(), getYWidth());
}
}
接下来,我们想要在某种程度上更改我们的&#34; flag&#34;的状态,在你遇到砖块的情况下,可能就像......
public boolean inBrickbase(arkBall ark) {
if (visible) {
for (int x = getX(); x <= getX() + getXWidth(); x++) //starts at upper left corner(x,y)
{
for (int y = getY(); y <= getY() + getYWidth(); y++) {
if (distance(x, y, ark.getX(), ark.getY()) <= ark.getRadius()) //checks every point on the bumper
{
visible = false;
return true;
}
}
}
}
return false;
}
现在,在有人指出它之前,我可能会考虑在inBrickbase
返回true
时从模型管理中移除砖块,从而节省了所有麻烦并减少了整体计算开销,但是我没有足够的背景来获得该