Нарисуйте несколько прямоугольников в одну линию - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь создать игру, в которой, если мяч попадает в прямоугольник, значение прямоугольника падает, а когда оно достигает 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); 







}

}

1 Ответ

0 голосов
/ 27 июня 2018

Хорошо, так что, увидев немного больше кода, давайте начнем с ...

int[] rect = new int[12];

Это создает массив int с, который изначально инициализируется для всех 0 с

Далее вы делаете ...

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

}

это просто нарисовать каждый «кирпичик» поверх последнего, потому что все они находятся в одинаковом горизонтальном положении

Что действительно, действительно, действительно, выделяется для меня это ...

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