簡體   English   中英

我需要幫助在屏幕上移動圖像

[英]I Need to help to move an image across the screen

我在做游戲,我從電腦上拍攝的圖像在屏幕上沒有移動,出了點問題,請幫幫我

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

還有另外7個類別,但圖像移動工作在此處,還有一個KeyAdapt類別,該類別僅用作keyadapter

您應該在按下鼠標時查看要移動的內容,但這取決於您向左還是向右移動,應該減小還是增大。 向上或向下相同。

因此,當您向上和向下移動時,您將沿Y軸移動,該軸以0向北(向上)開始,以Y最大值的南側(向下)結束,因此,如果您要向上移動,請執行velY-=速度,並且如果要下去,你的速度就快了。 假設當時的velY為0,並且速度大於0。

X軸也一樣,左為0,右為X的最大值。向左移動時,從0減小(velX:-5),向右移動時從0增大(velX:+5)。

另一件事是,當您多次需要ImageIcon時,最好將其設置為私有屬性,因為那樣只會實例化一次。 這將大大提高您的性能,因為每次使用位於硬盤驅動器上的映像實例化ImageIcon時,您都會執行磁盤IO操作,這會使所有操作變慢。

命名在Java中也很重要,因為用不正確的大寫字母寫方法名稱。 方法名稱應以小寫字母開頭,並使用駝峰式。

我用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));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM