java映像不移动
嗨,伙计们,我正在做一个游戏。但由于某种原因,图像既不会出现也不会移动 下面是一些代码 TheScreen.javajava映像不移动,java,image,animation,Java,Image,Animation,嗨,伙计们,我正在做一个游戏。但由于某种原因,图像既不会出现也不会移动 下面是一些代码 TheScreen.java package TheCarePackage; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TheScreen extends JFrame implements KeyListener{ short FWIDTH = 500; short FHEIGHT =
package TheCarePackage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TheScreen extends JFrame implements KeyListener{
short FWIDTH = 500;
short FHEIGHT = 500;
private Image dbImage;
private Graphics dbGraphics;
private Image Bg;
static Player_1 P1 = new Player_1(250,450);
static AlienSpawner AS = new AlienSpawner();
public TheScreen(){
addKeyListener(this);
setTitle("1st Game");
setSize(FWIDTH,FHEIGHT);
setResizable(false);
setLocationRelativeTo(null);
setBackground(Color.white);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
ImageIcon back = new ImageIcon("C:/Users/yellowsoldier25/Desktop/Games/PlanB_1stGame/src/TheCarePackage/Images/Background.png");
Bg = back.getImage();
}
public void paint(Graphics g){
dbImage = createImage(getWidth(),getHeight());
dbGraphics = dbImage.getGraphics();
paintComponent(dbGraphics);
g.drawImage(dbImage,0,0,this);
}
public void paintComponent(Graphics g){
g.drawImage(Bg,0,0,this);
P1.draw(g);
AS.paint(g);
repaint();
}
public static void main(String[] args) {
new TheScreen();
Thread As = new Thread(AS);
Thread Player1 = new Thread(P1);
As.start();
Player1.start();
}
public void keyPressed(KeyEvent e) {
P1.keyPressed(e);
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}
ThePlayer.java
package TheCarePackage;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Player_1 implements Runnable{
public int a = 8;
int x,y;
Image Player_1;
private Shot[] shots;
static AlienSpawner AS = new AlienSpawner();
public Player_1(int x, int y){
this.x = x;
this.y = y;
ImageIcon i = new ImageIcon("C:/Users/yellowsoldier25/Desktop/Games/PlanB_1stGame/src/TheCarePackage/Images/Player_1.png");
Player_1 = i.getImage();
shots = new Shot[8];
}
public void draw(Graphics g){
g.drawImage(Player_1,x,y,50,50,null);
g.setColor(Color.white);
g.drawString("Ammo : " + a,10,40);
for(int i = 0; i < shots.length; i++){
if(shots[i] != null){
shots[i].drawShot(g);
}
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == e.VK_LEFT){
x += -8;
}
if(e.getKeyCode() == e.VK_RIGHT){
x += 8;
}
if(e.getKeyCode() == e.VK_SPACE){
for(int i = 0; i < shots.length; i++){
if(shots[i] == null){
a--;
shots[i] = generateShot();
break;
}
}
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public Shot generateShot(){
Shot shot = new Shot(x+23,y-7);
return shot;
}
@Override
public void run(){
try{
while(true){
Thread.sleep(5);
for(int i = 0; i < shots.length; i++){
if(shots[i] != null){
shots[i].moveShot(-1);
if(shots[i].getY() < 0){
shots[i] = null;
a++;
}
}
}
}
}catch(Exception e){System.err.println(e.getMessage());}
}
}
外星人阶级还有另一个问题
package TheCarePackage;
import java.awt.*;
import javax.swing.*;
public class Alien1stVariant {
private int x;
private int y;
private Image Alien;
public Alien1stVariant(int x, int y){
this.x = x;
this.y = y;
ImageIcon AlienIcon = new ImageIcon("C:/Users/yellowsoldier25/Desktop/Games/PlanB_1stGame/src/TheCarePackage/Images/Alien.png");
Alien = AlienIcon.getImage();
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public void movement(int speed){
y += speed;
}
public void drawAlien(Graphics g){
g.drawImage(Alien,x,y,40,40,null);
}
}
请尽快帮忙
问题:外来映像将不会移动并显示。运行方法中的TheAlienSpawner.java文件中似乎有一个无限循环:
public void run() {
try{
Thread.sleep(20);
while(true){ //This will never end
A1.movement(1);
}
}catch(Exception e){System.err.println(e.getMessage());}
}
您只需在While(true)之前将胎面休眠20 ms,这会导致无限循环,您所寻找的类似于此:
public void run() {
try{
while(true){
Thread.sleep(20);
A1.movement(1);
}
}catch(Exception e){System.err.println(e.getMessage());}
}
JFrame没有paintComponent()方法,所以不要尝试重写它 您也不应该重写paint()方法。相反,自定义绘制是通过扩展JPanel(或JComponent)完成的,然后将面板添加到框架的内容窗格中
如果要制作动画,请使用Swing Timer now a while loop with a sleep()。调试时您学到了什么?图像不会移动,也不会拍摄,但如果删除run方法,则图像会显示,但仍然不会移动。这是一个关于图像重置和动画制作的问题。这怎么会是一个“地方问题”?很多人都有这些问题。忘掉你自己,伙计们,试着对论坛做出积极的贡献,而不是攻击第一个在网站上发帖的人。
public void run() {
try{
while(true){
Thread.sleep(20);
A1.movement(1);
}
}catch(Exception e){System.err.println(e.getMessage());}
}