作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
刚开始学习Java,最近学习了Timer类。我正在尝试将我目前学到的知识应用到制作这个项目中,其中一个宇宙飞船发射子弹。我的所有控件都可以正常工作,但是当我创建另一个项目符号对象时,我遇到了以前的项目符号 中途停止的问题。我从昨天开始就一直在搜索,但我似乎找不到合适的关键字。我想我明白为什么它会停止,但我怎样才能让子弹继续移动?
我在我的 JFrame 中添加了这个 GamePanel 类。
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
public class GamePanel extends JPanel implements KeyListener, ActionListener {
int panelWidth = 500;
int panelHeight = 500;
JLabel spaceship;
int shipWidth = 50;
int shipHeight = 50;
int shipX = 0;
int shipY = panelHeight - shipHeight; // BOTTOM of GamePanel
int shipXVelocity = 5;
JLabel bullet;
int bulletWidth = 10;
int bulletHeight = 25;
int bulletX;
int bulletY;
int bulleyYVelocity = 7;
boolean left,right = false;
Timer timer;
GamePanel() {
timer = new Timer(10,this);
timer.start();
this.setPreferredSize(new Dimension(panelWidth,panelHeight));
this.setLayout(null);
this.setBackground(Color.black);
this.setFocusable(true);
this.addKeyListener(this);
spaceship = new JLabel();
spaceship.setBounds(shipX, shipY, shipWidth, shipHeight);
spaceship.setBackground(Color.green);
spaceship.setOpaque(true);
this.add(spaceship);
}
void shoot() {
bulletX = shipX + (shipWidth / 2) - (bulletWidth / 2); // CENTER-TOP of spaceship
bulletY = shipY;
bullet = new JLabel();
bullet.setBounds(bulletX, bulletY, bulletWidth, bulletHeight);
bullet.setBackground(Color.white);
bullet.setOpaque(true);
this.add(bullet);
}
@Override
public void keyTyped(KeyEvent e) {
switch(e.getKeyChar()) {
case 'a' : left = true;
break;
case 'd' : right = true;
break;
}
}
@Override
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()) {
case 10 : shoot();
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
switch(e.getKeyChar()) {
case 'a' : left = false;
break;
case 'd' : right = false;
break;
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(left == true && shipX > 0) shipX -= shipXVelocity;
if(right == true && shipX < panelWidth - shipWidth) shipX += shipXVelocity;
spaceship.setLocation(shipX, shipY);
if(bullet != null) { // Move if a bullet exist
bulletY -= bulleyYVelocity;
bullet.setLocation(bulletX, bulletY);
}
if(bulletY < 0) this.remove(bullet);;
}
}
输出:
最佳答案
有两种可能的解决方案:
我认为第二种解决方案更适合你的游戏,没有太多计算是他的物体移动。
关于java - 如何在创建另一个项目符号对象时连续移动这些 'bullets'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68387905/
我是一名优秀的程序员,十分优秀!