Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要帮助在屏幕上移动图像_Java_User Interface_Awt - Fatal编程技术网

Java 我需要帮助在屏幕上移动图像

Java 我需要帮助在屏幕上移动图像,java,user-interface,awt,Java,User Interface,Awt,我正在制作一个游戏,我从电脑上拍摄的图像在屏幕上没有移动,是不是有什么问题请帮助我 import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.event.KeyEvent; import java.util.ArrayList; import javax.swing.ImageIcon; public class Player extends Entity{

我正在制作一个游戏,我从电脑上拍摄的图像在屏幕上没有移动,是不是有什么问题请帮助我

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.util.ArrayList;    
import javax.swing.ImageIcon;

public class Player extends Entity{    
    int velX=0,velY=0, speed =5;

    public Player(int x, int y) {
        super(x, y);
    }

    public void Update(){       
        y+=velY;
        x+=velX;
        checkCollision();
    }

    public void draw(Graphics2D g2d){
        g2d.drawImage(getPlayerImage(),x,y, null);
        g2d.draw(getbounds());
    }

    public Image getPlayerImage(){
        ImageIcon ic = new ImageIcon("D:/abc.png");
        return ic.getImage();       
    }

    public void KeyPressed(KeyEvent e){
        int key = e.getKeyCode();
        if(key== KeyEvent.VK_UP) velY=-speed;       
        else if(key==KeyEvent.VK_DOWN) velY=speed;
        if(key==KeyEvent.VK_LEFT) velX-=speed;
        else if(key==KeyEvent.VK_RIGHT) velX=speed;
        else if(key==KeyEvent.VK_SPACE) GameFrame.addMissile(new Missile(x,y));
    }

    public void KeyReleased(KeyEvent e){
        int key = e.getKeyCode();
        if(key== KeyEvent.VK_UP)velY=0;
        else if(key==KeyEvent.VK_DOWN) velY=0;
        if(key==KeyEvent.VK_LEFT) velX=0;
        else if(key==KeyEvent.VK_RIGHT) velX=0;
    }

    public void checkCollision(){
        ArrayList<Enemy> enemies = GameFrame.getEnemyList();        
        for(int i=0; i<enemies.size(); i++){
            Enemy tempEnemy = enemies.get(i);
            if(getbounds().intersects(enemies.get(i).getbounds())) System.exit(0);
        }
    }

    public Rectangle getbounds(){
        return new Rectangle(x,y,getPlayerImage().getWidth(null),getPlayerImage().getHeight(null));
    }
}
导入java.awt.Graphics2D;
导入java.awt.Image;
导入java.awt.Rectangle;
导入java.awt.event.KeyEvent;
导入java.util.ArrayList;
导入javax.swing.ImageIcon;
公共类播放机扩展实体{
int velX=0,velY=0,speed=5;
公共播放器(整数x,整数y){
super(x,y);
}
public void Update(){
y+=0;
x+=velX;
检查碰撞();
}
公共空心图(Graphics2D g2d){
g2d.drawImage(getPlayerImage(),x,y,null);
g2d.draw(getbounds());
}
公共映像getPlayerImage(){
ImageIcon ic=新的ImageIcon(“D:/abc.png”);
返回ic.getImage();
}
按下公共无效键(按键事件e){
int key=e.getKeyCode();
if(key==KeyEvent.VK_UP)velY=-速度;
如果(key==KeyEvent.VK_DOWN)velY=speed;
如果(key==KeyEvent.VK_LEFT)velX-=速度;
否则,如果(key==KeyEvent.VK_RIGHT)velX=速度;
else if(key==KeyEvent.VK_SPACE)GameFrame.add飞弹(新飞弹(x,y));
}
公共无效密钥已释放(密钥事件e){
int key=e.getKeyCode();
如果(key==KeyEvent.VK_UP)velY=0;
如果(key==KeyEvent.VK_DOWN)velY=0,则为else;
如果(key==KeyEvent.VK_LEFT)velX=0;
如果(key==KeyEvent.VK_RIGHT)velX=0,则为else;
}
公共无效检查冲突(){
ArrayList=GameFrame.getEnemyList();

对于(int i=0;i当你按下鼠标时,你应该看到,你想要移动,但这取决于你向左或向右移动,你应该减少或增加。向上或向下移动也是如此

因此,当你上下移动时,你沿着Y轴移动,Y轴以0北(向上)开始,以Y南(向下)的最大值结束。因此,如果你想向上移动,你做velY-=速度,如果你想向下移动,你做velY+=速度。假设当时velY为0,速度大于0

X轴也是如此,左边是0,右边是X的最大值。当你向左走时,你从0减少(velX:-5),当你向右走时,你从0增加(velX:+5)

另一件事是,当您多次需要ImageIcon时,最好将其设置为私有属性,因为这样它只实例化一次。这将大大提高性能,因为每次使用硬盘上的图像实例化ImageIcon时,磁盘IO操作都会减慢速度一切

命名在Java中也很重要,您使用不正确的大写字母编写方法名称。方法名称应以小写字母开头,并使用camelcase

我用switch-case语句重写了您的代码,使其更具可读性

public class Player extends Entity {    
    private int velX=0,velY=0, speed =5;
    private ImageIcon ic = new ImageIcon("D:/abc.png");

    public Player(int x, int y) {
        super(x, y);
    }

    @Override
    public void update(){       
        y+=velY;
        x+=velX;
        checkCollision();
    }

    public void draw(Graphics2D g2d){
        g2d.drawImage(getPlayerImage(),x,y, null);
        g2d.draw(getbounds());
    }

    public Image getPlayerImage(){
        return ic.getImage();       
    }

    public void keyPressed(KeyEvent e){
        switch (e.getKeyCode()) {
            case KeyEvent.VK_UP:    velY -= speed; break;
            case KeyEvent.VK_DOWN:  velY += speed; break;
            case KeyEvent.VK_LEFT:  velX -= speed; break;
            case KeyEvent.VK_RIGHT: velX += speed; break;
            case KeyEvent.VK_SPACE: GameFrame.addMissile(new Missile(x,y)); break;
            default: break;
        }
    }

    public void keyReleased(KeyEvent e){
        switch (e.getKeyCode()) {
            case KeyEvent.VK_UP:    velY = 0; break;
            case KeyEvent.VK_DOWN:  velY = 0; break;
            case KeyEvent.VK_LEFT:  velX = 0; break;
            case KeyEvent.VK_RIGHT: velX = 0; break;
            default: break;
        }
    }

    public void checkCollision(){
        ArrayList<Enemy> enemies = GameFrame.getEnemyList();        
        for(int i=0; i<enemies.size(); i++){
            Enemy tempEnemy = enemies.get(i);
            if(getbounds().intersects(enemies.get(i).getbounds())) System.exit(0);
        }
    }

    public Rectangle getbounds(){
        return new Rectangle(x,y,getPlayerImage().getWidth(null),getPlayerImage().getHeight(null));
    }
}
公共类播放器扩展实体{
私用int velX=0,velY=0,速度=5;
私有ImageIcon ic=新的ImageIcon(“D:/abc.png”);
公共播放器(整数x,整数y){
super(x,y);
}
@凌驾
public void update(){
y+=0;
x+=velX;
检查碰撞();
}
公共空心图(Graphics2D g2d){
g2d.drawImage(getPlayerImage(),x,y,null);
g2d.draw(getbounds());
}
公共映像getPlayerImage(){
返回ic.getImage();
}
按下公共无效键(按键事件e){
开关(如getKeyCode()){
case KeyEvent.VK_UP:velY-=速度;中断;
case KeyEvent.VK_DOWN:velY+=速度;中断;
case KeyEvent.VK_LEFT:velX-=速度;中断;
case KeyEvent.VK_RIGHT:velX+=速度;中断;
case KeyEvent.VK_空间:GameFrame.add飞弹(新飞弹(x,y));break;
默认:中断;
}
}
公共无效密钥已释放(密钥事件e){
开关(如getKeyCode()){
case KeyEvent.VK_UP:velY=0;中断;
case KeyEvent.VK_DOWN:velY=0;中断;
case KeyEvent.VK_LEFT:velX=0;中断;
case KeyEvent.VK_RIGHT:velX=0;中断;
默认:中断;
}
}
公共无效检查冲突(){
ArrayList=GameFrame.getEnemyList();

对于在你的VKJUP中,你的动作是工作的吗?在你的VCYUP中,你有这个代码> Value= -速度;。你确定它不应该是代码> Value+= Survivy;为什么AWT而不是Swing?请考虑创建和发布.Swing是一个更健壮和强大的GUI库,并且真的没有理由使用更古老和较弱的AWT库。稀罕。你也会在这个网站上找到很多这样的例子——通过按键移动一个精灵——使用Swing-in答案,而不是AWT。帮你自己一个忙,然后切换一下。@Hovercraft满是鳗鱼,我不认为这真的有帮助,当你建议切换到更好的UI语言时,我认为Swing是个糟糕的选择CE,考虑到你可以用C++,QT做更多更好的事情,比如更好的性能,没有VM等等……语言。我推荐一个更好的库。请重新阅读我的建议。有两个GUI库通常用于构建Java GUI,AWT和Swing,它们在1999年——13年前取代了AWT。如果有人想要创建Java GUI,他们不应该使用AWT。句点。异常错误,,你能给我你的fb链接吗,然后我将发送给你你知道我的整个项目,基本上,我不理解你在这里实现的逻辑图像还没有移动,可能有多种原因,1.你应该检查鼠标是否有反应,2.是否在某处调用了更新方法。