【发布时间】:2022-01-04 14:39:27
【问题描述】:
我会尝试用 Java 复制 Pacman 游戏。我确保通过键盘我可以通过替换图像使播放器正确移动和旋转它。我现在不知道如何让他在走路时无休止地张开和闭上嘴。这是我的代码(目前,我只处理它走过的部分):
吃豆人闭着嘴的形象是“playerClosed”
import java.awt.Graphics;
import java.util.concurrent.TimeUnit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.event.KeyEvent;
import java.awt.Color;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.Timer;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import javax.swing.Timer;
public class decisiva extends JPanel implements ActionListener, KeyListener {
int x=0;
int y=0;
int velX=0;
int velY=0;
Timer tm = new Timer(1,this);
private String playerDirection="right";
private Image playerUp = new ImageIcon("boh/imageUp.png").getImage();
private Image playerDown = new ImageIcon("boh/imageDown.png").getImage();
private Image playerRight = new ImageIcon("boh/imageRight.png").getImage();
private Image playerLeft = new ImageIcon("boh/imageLeft.png").getImage();
private Image playerClosed = new ImageIcon("boh/closed.png").getImage();
public decisiva() {
tm.start();
addKeyListener(this);
setFocusable(true);
}
Timer timer = new Timer(5444400,this);
public void paintComponent(Graphics g) {
super.paintComponent(g);
if(playerDirection=="up") {
g.drawImage(playerUp,x,y,this);
}
if(playerDirection=="down") {
g.drawImage(playerDown,x,y,this);
}
if(playerDirection=="left") {
g.drawImage(playerLeft,x,y,this);
}
if(playerDirection=="right") {
g.drawImage(playerRight,x,y,this);
}
}
public void actionPerformed(ActionEvent e) {
x = x+velX;
y= y+velY;
repaint();
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_W) {
velX=0;
velY=-1;
playerDirection="up";
}
if(e.getKeyCode() == KeyEvent.VK_D) {
velX=1;
velY=0;
playerDirection="right";
}
if(e.getKeyCode() == KeyEvent.VK_A) {
velX=-1;
velY=0;
playerDirection="left";
}
if(e.getKeyCode() == KeyEvent.VK_S) {
velX=0;
velY=1;
playerDirection="down";
}
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
}
还有主要的:
package player;
import javax.swing.JFrame;
public class main {
public static void main(String[] args) {
decisiva t = new decisiva();
JFrame jf = new JFrame();
jf.setTitle("tutorial");
jf.setSize(600,400);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(t);
}
}
My goal is to be able to do this in the simplest way.
但现在使用我的代码,我可以通过仅沿所需方向旋转它来使其正确移动。
【问题讨论】:
-
这能回答你的问题吗? Animating Sprite Sheets in Java using LibGdx
-
也许您可以使用
int作为计数器,在每个游戏时间/帧递增,当它达到特定数字后,您切换动画图像并将计数器重置为零 -
最简单的解决方案是创建四个 GIF 文件,每个方向一个。
标签: java swing animation 2d pacman