在一行中绘制多个矩形
Draw multiple rectangles in one line
我正在尝试制作一个游戏,如果球击中一个矩形,矩形的值就会下降,一旦达到 0,它就会消失。我还没有实现计数变量但遇到了问题,我试图在顶部渲染一个数组列表,但是当我试图绘制多个矩形并让它们留在那里时我的循环只渲染一个对象所以球会与之发生反应。我该怎么做?
package graphics;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
public class Ballz extends LASSPanel
{
//Variables for the circle (Global Variables)
int circleX, circleY, circleSize;
double ballDirection,circleDX, circleDY;
//Colors
Color circleColor;
Color backgroundColor;
Dimension size;
int turn = 1;
int click =0;
int go =0;
int move = 0;
boolean roundEnd;
//Variables for the map
int brickWH;
int[] rect = new int[12];
public Ballz()
{
//Ball Variables
size = new Dimension(0,0);
circleX = 190;
circleY = 545;
circleDX = 0;
circleDY=0;
circleSize = 15;
circleColor = new Color (245,245,245);
backgroundColor = new Color (28,28,28);
//Game Variables
roundEnd = true;
brickWH = 18;
}
public void update()
{
//Get size of screen
getSize(size);
circleX += circleDX;
circleY += circleDY;
//Screen borders
if (circleX >= (size.width) - circleSize)
{
circleDX = -circleDX;
circleX = size.width-circleSize;
}
if (circleX <= 0)
{
circleDX = -circleDX;
circleX = 0;
}
if (circleY >= (size.height -circleSize))
{
circleDX =0;
circleDY = 0;
circleX = 190;
circleY = 545;
roundEnd = true;
}
if (circleY <= 0)
{
circleDY = -circleDY;
circleY = 0;
}
circleX += circleDX;
circleY += circleDY;
click = getMouseButton(0);
if (click ==1)
{
circleDY = -5;
circleDX = -3;
}
//Rectangle Loop
for (int i =0; i<rect.length; i++)
{
rect[i] = rect[i] +50;
}
repaint();
}
public void paint(Graphics g)
{
//Game Colors
g.setColor(circleColor);
g.fillOval(circleX, circleY, circleSize, circleSize);
for (int i=0; i<rect.length; i++)
{
g.fillRect(rect[i], 2, brickWH, brickWH);
}
setBackground(backgroundColor);
}
}
好的,看到更多代码后,让我们从...
开始
int[] rect = new int[12];
这将创建一个 int
s 的数组,它最初初始化为所有 0
s
接下来,你做...
for (int i =0; i<rect.length; i++)
{
rect[i] = rect[i] +50;
}
这基本上就是将 50
添加到 0
并将其分配回数组元素,所以当您这样做时...
for (int i=0; i<rect.length; i++)
{
g.fillRect(rect[i], 2, brickWH, brickWH);
}
它只是将每个 "brick" 画在最后一个之上,因为它们都处于相同的水平位置
对我来说真正非常非常突出的是...
for (int i =0; i<rect.length; i++)
{
rect[i] = rect[i] +50;
}
您是否打算让每块砖块相隔 50 像素?在这种情况下,您可能应该做更像...
int xPos = 0;
for (int i =0; i<rect.length; i++)
{
rect[i] = xPos;
xPos += 50;
}
相反,如果它们应该放在一起,那么您会想要更像...
for (int i =0; i<rect.length; i++)
{
rect[i] = brickWH * i;
}
我正在尝试制作一个游戏,如果球击中一个矩形,矩形的值就会下降,一旦达到 0,它就会消失。我还没有实现计数变量但遇到了问题,我试图在顶部渲染一个数组列表,但是当我试图绘制多个矩形并让它们留在那里时我的循环只渲染一个对象所以球会与之发生反应。我该怎么做?
package graphics;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
public class Ballz extends LASSPanel
{
//Variables for the circle (Global Variables)
int circleX, circleY, circleSize;
double ballDirection,circleDX, circleDY;
//Colors
Color circleColor;
Color backgroundColor;
Dimension size;
int turn = 1;
int click =0;
int go =0;
int move = 0;
boolean roundEnd;
//Variables for the map
int brickWH;
int[] rect = new int[12];
public Ballz()
{
//Ball Variables
size = new Dimension(0,0);
circleX = 190;
circleY = 545;
circleDX = 0;
circleDY=0;
circleSize = 15;
circleColor = new Color (245,245,245);
backgroundColor = new Color (28,28,28);
//Game Variables
roundEnd = true;
brickWH = 18;
}
public void update()
{
//Get size of screen
getSize(size);
circleX += circleDX;
circleY += circleDY;
//Screen borders
if (circleX >= (size.width) - circleSize)
{
circleDX = -circleDX;
circleX = size.width-circleSize;
}
if (circleX <= 0)
{
circleDX = -circleDX;
circleX = 0;
}
if (circleY >= (size.height -circleSize))
{
circleDX =0;
circleDY = 0;
circleX = 190;
circleY = 545;
roundEnd = true;
}
if (circleY <= 0)
{
circleDY = -circleDY;
circleY = 0;
}
circleX += circleDX;
circleY += circleDY;
click = getMouseButton(0);
if (click ==1)
{
circleDY = -5;
circleDX = -3;
}
//Rectangle Loop
for (int i =0; i<rect.length; i++)
{
rect[i] = rect[i] +50;
}
repaint();
}
public void paint(Graphics g)
{
//Game Colors
g.setColor(circleColor);
g.fillOval(circleX, circleY, circleSize, circleSize);
for (int i=0; i<rect.length; i++)
{
g.fillRect(rect[i], 2, brickWH, brickWH);
}
setBackground(backgroundColor);
}
}
好的,看到更多代码后,让我们从...
开始int[] rect = new int[12];
这将创建一个 int
s 的数组,它最初初始化为所有 0
s
接下来,你做...
for (int i =0; i<rect.length; i++)
{
rect[i] = rect[i] +50;
}
这基本上就是将 50
添加到 0
并将其分配回数组元素,所以当您这样做时...
for (int i=0; i<rect.length; i++)
{
g.fillRect(rect[i], 2, brickWH, brickWH);
}
它只是将每个 "brick" 画在最后一个之上,因为它们都处于相同的水平位置
对我来说真正非常非常突出的是...
for (int i =0; i<rect.length; i++)
{
rect[i] = rect[i] +50;
}
您是否打算让每块砖块相隔 50 像素?在这种情况下,您可能应该做更像...
int xPos = 0;
for (int i =0; i<rect.length; i++)
{
rect[i] = xPos;
xPos += 50;
}
相反,如果它们应该放在一起,那么您会想要更像...
for (int i =0; i<rect.length; i++)
{
rect[i] = brickWH * i;
}