Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/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_Performance - Fatal编程技术网

Java 如何更改此代码中的重影速度

Java 如何更改此代码中的重影速度,java,performance,Java,Performance,如何调整此代码中幽灵移动的速度?所需的代码是否已经存在,我只需要更改值?或者我需要补充什么?我对编码相当陌生,所以请尽量用最简单的形式来表达。多谢各位 package basicgame; import java.awt.*; import java.awt.event.*; import java.io.File; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.*; public class Ja

如何调整此代码中幽灵移动的速度?所需的代码是否已经存在,我只需要更改值?或者我需要补充什么?我对编码相当陌生,所以请尽量用最简单的形式来表达。多谢各位

package basicgame;

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;

public class JavaGame extends JPanel {

    int x, y;
  //  private Image dbImage;
    //private Graphics dbg;
    Image ghost;
    Image bg;

    public class AL extends KeyAdapter {
        public void keyPressed(KeyEvent e) {
            int keyCode = e.getKeyCode();

            if (keyCode == e.VK_LEFT) {
                if (x <= 8)
                    x = 8;
                else
                    x += -5;
            }
            if (keyCode == e.VK_RIGHT) {
                if (x >= 435)
                    x = 435;
                else
                    x += +5;
            }
            if (keyCode == e.VK_UP) {
                if (y <= 18)
                    y = 18;
                else
                    y += -5;
            }
            if (keyCode == e.VK_DOWN) {
                if (y >= 325)
                    y = 325;
                else
                    y += +5;
            }
        }

        public void keyReleased(KeyEvent e) {
        }
    }

    public JavaGame() throws Exception {
        // Load images

        ghost = ImageIO.read(new File("ghost.gif"));

        bg = ImageIO.read(new File("myBkg.PNG"));

        setFocusable(true);

        // Game properties
        addKeyListener(new AL());
        x = 10;
        y = 10;

        ActionListener al = new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                repaint();
            }
        };
        Timer timer = new Timer(10,al);
        timer.start();
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        // here, you have a 'drawimage' command for each object you're moving
        // if you have 2 players, you have another drawImage for that one
        // if you have a bullet, you have another for it. You have to keep
        //track of each object's x,y coordinates and then draw the image at that position.
        //you'll need some collision detection in there to see if bullets/players are
        //in the same position and then act accordingly.

        g.drawImage(bg, 0, 0, null);

        g.drawImage(ghost, x, y, this);


    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    JFrame f = new JFrame("Java Game");
                    f.setSize(500, 500);
                    f.setResizable(false);
                    f.setVisible(true);
                    f.setBackground(Color.GRAY);
                    f.setContentPane(new JavaGame());
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}
package基本名称;
导入java.awt.*;
导入java.awt.event.*;
导入java.io.File;
导入java.net.URL;
导入javax.imageio.imageio;
导入javax.swing.*;
公共类JavaGame扩展了JPanel{
int x,y;
//私有镜像dbImage;
//专用图形数据库;
影像鬼;
图像背景;
公共类AL扩展了KeyAdapter{
按下公共无效键(按键事件e){
int keyCode=e.getKeyCode();
if(keyCode==e.VK_左){
如果(x=435)
x=435;
其他的
x+=+5;
}
if(keyCode==e.VK\u UP){
如果(y=325)
y=325;
其他的
y+=+5;
}
}
公共无效密钥已释放(密钥事件e){
}
}
publicJavaGame()引发异常{
//加载图像
ghost=ImageIO.read(新文件(“ghost.gif”);
bg=ImageIO.read(新文件(“myBkg.PNG”);
设置聚焦(真);
//游戏属性
addKeyListener(新AL());
x=10;
y=10;
ActionListener al=新的ActionListener(){
已执行的公共无效行动(行动事件ae){
重新油漆();
}
};
定时器=新定时器(10,al);
timer.start();
}
公共组件(图形g){
超级组件(g);
//在这里,您为移动的每个对象都有一个“drawimage”命令
//如果你有两个玩家,你就有另一个该玩家的drawImage
//如果你有一颗子弹,你就有另一颗。你必须保留它
//跟踪每个对象的x、y坐标,然后在该位置绘制图像。
//你需要在那里进行一些碰撞检测,以查看子弹/玩家是否在移动
//处于相同的位置,然后采取相应的行动。
g、 drawImage(bg,0,0,null);
g、 drawImage(鬼,x,y,this);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
试一试{
JFrame f=新的JFrame(“Java游戏”);
f、 设置大小(500500);
f、 可设置大小(假);
f、 setVisible(真);
f、 挫折背景(颜色:灰色);
f、 setContentPane(新JavaGame());
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
}

位置存储在变量
x
y
中。运动的“速度”简单地用按键上这些变量的变化率来描述;只要看一下代码,就会发现这个“速度”设置得相当笨拙,设置为
5
。它出现在四个不同的地方——每个方向向量一次。要更改“速度”,只需更改所有这些事件,但请记住,如果忘记更改其中一些事件,对象将以不同的速度向不同的方向移动

通过使用命名变量替换所有的变量,您可以极大地改进这段代码。这不仅包括“速度”,还包括移动边界:
8
18
435
325
。将这些命名变量放入
AL
类或
JavaGame
类中,具体取决于它们的可用位置


还有一个不相关的bug,我想提一下。您当前的代码将允许您移动到边界之外,然后在随后的按键中,由于“剪辑”而向指示的相反方向移动。例如,说
x=10
。如果按左键,则将
x
更改为
5
。如果再次按向左键,将触发边界条件并向右移动,将
x
设置为
8
。这可能不可取,因此应首先应用移动,然后将其剪裁到边界

然后,您的
AL
类(也可以考虑一个更具描述性的名称…)可能看起来像这样:

public class AL extends KeyAdapter {
    private static final int SPEED = 5; // Controls the movement speed in all directions

    // Variables controlling the movement boundaries
    private static final int BOUND_LEFT = 8;
    private static final int BOUND_RIGHT = 435;
    private static final int BOUND_BOTTOM = 18;
    private static final int BOUND_TOP = 325;

    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();

        if (keyCode == e.VK_LEFT) {
            x -= SPEED;  // Move left

            if (x <= BOUND_LEFT) {
                x = BOUND_LEFT;  // If movement placed us out of bounds, move to boundary instead
            }
        }
        if (keyCode == e.VK_RIGHT) {
            x += SPEED;

            if (x >= BOUND_RIGHT) {
                x = BOUND_RIGHT;
            }
        }
        if (keyCode == e.VK_UP) {
            y += SPEED;

            if (y >= BOUND_TOP) {
                y = BOUND_TOP;
            }
        }
        if (keyCode == e.VK_DOWN) {
            y -= SPEED;

            if (y <= BOUND_BOTTOM) {
                y = BOUND_BOTTOM;
            }
        }
    }

    public void keyReleased(KeyEvent e) {
    }
}
public类扩展了KeyAdapter{
私有静态最终整数速度=5;//控制所有方向的移动速度
//控制运动边界的变量
私有静态最终整数界_左=8;
私有静态最终整型绑定_RIGHT=435;
私有静态最终整型边界_BOTTOM=18;
私有静态最终int-BOUND_-TOP=325;
按下公共无效键(按键事件e){
int keyCode=e.getKeyCode();
if(keyCode==e.VK_左){
x-=速度;//向左移动
如果(x=右边界){
x=右边界;
}
}
if(keyCode==e.VK\u UP){
y+=速度;
如果(y>=绑定\u顶部){
y=绑定_顶部;
}
}
if(keyCode==e.VK_向下){
y-=速度;

如果(y By
speed
你的确切意思是什么?根据你的代码
x
,和
y
应该控制重影坐标,因此调整这些坐标应该是你想要的。1.找到重影位置存储在哪些变量中。2.找到这些变量的更改位置。我建议阅读一些java教程,尤其是如果您无法完成这些步骤,请尽早完成。只需增加
x+=
y+=
5
,同时为该值创建一个速度常数……这样更容易