Как убрать следы в движущемся тексте или цифры в java? - PullRequest
0 голосов
/ 15 февраля 2020

Всякий раз, когда я пытался запустить программу, да, текст перемещается, но оставляет след последней позиции. Как, например, текст «test» сначала располагается в x = 50, y = 100, затем в следующем обновлении x = 50, y = 120. Проблема в том, что последняя позиция, которая является x = 50, y = 100, все еще отображается. Я хотел бы удалить последнюю позицию текста каждый раз, когда он обновляется.

Можете ли вы, ребята, помочь мне?

(метка j находится в методе Выполнено действие)

Это мой основной класс.

package GAME;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;

public class GameFrame extends JPanel implements ActionListener{

Image background = Toolkit.getDefaultToolkit().createImage("D:\\SHIPMATH TEXTURES\\simple-water-animation-597-x-800.gif");


Timer mainTimer;

shipPlayer player;
enemyShips enemy;


int level = 5;
int enemyCount = 5;
int numCount = 10;

int y=0;

// arraylists are arrays that has no capacity limit
static ArrayList<Numbers> number = new ArrayList<Numbers>();
static ArrayList<enemyShips> enemies = new ArrayList<enemyShips>();
static ArrayList<Cannons> cannon_balls = new ArrayList<Cannons>();

JLabel numbers;

Random rn = new Random();

public GameFrame() {
    // calls the actionPerformed method every 10 milliseconds   
    mainTimer = new Timer(10, this);

    mainTimer.start();
    setLayout(null);











    setFocusable(true);

    player = new shipPlayer(0, 500);
    addKeyListener(new KeyAdapt(player));



    startGame();

}


public void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D) g;

    g2d.drawImage(background, 0, 0, this);

    player.draw(g2d);






    repaint();


    for(int i=0; i<enemies.size(); i++) {

        // the value of 'i' is the location/index used to find the value stored in the ArrayList
        enemyShips enemy = enemies.get(i);
        enemy.draw(g2d);

    }

    for(int i=0; i<cannon_balls.size(); i++) {
        Cannons cannon = cannon_balls.get(i);
        cannon.draw(g2d);
    }







}



public void actionPerformed(ActionEvent e) {
    player.update();

    // where movement of the enemy happens
    for(int i=0; i<enemies.size(); i++) {
        enemyShips enemy = enemies.get(i);
        enemy.update();
    }


  //        Later...
    for(int i=0; i<cannon_balls.size(); i++) {
        Cannons cannon = cannon_balls.get(i);
        cannon.update();


    }

    /////////////////////////////////////

    y++;
    numbers = new JLabel("TEST");
    numbers.setBounds(200, y, 100, 100);

    add(numbers);

    ////////////////////////////////////

    repaint();


}


public static void addEnemy(enemyShips e) {

    enemies.add(e);
    // stores what the user puts in the enemyShips' object into the ArrayList "enemies"
}

public static void removeEnemy(enemyShips e) {
    enemies.remove(e);
    // removes what the user inputs from the ArrayList
}

public static ArrayList<enemyShips> getEnemyList() {
    return enemies;
}



public static void addNumbers(Numbers n) {
    number.add(n);
}


public static void addCannons(Cannons c) {

    cannon_balls.add(c);
    // stores what the user puts in the Cannons' object into the ArrayList "cannon_balls"
}

public static void removeCannons(Cannons c) {
    cannon_balls.remove(c);
    // removes what the user inputs from the ArrayList
}

public static ArrayList<Cannons> getCannonsList() {
    return cannon_balls;
}







public void startGame() {

//      enemyCount = level * 5;

    // runs 5 times
    for(int x=0; x<enemyCount; x++) {

        addEnemy(new enemyShips(rn.nextInt(500), -rn.nextInt(800)));

    }



}

}

Это выходные данные этой программы. Нажмите здесь для вывода программы

...