Java 有没有办法在我的游戏中增加一个跳远技工?
我一直在尝试为矩形(播放器)添加一种方法,使其上升到130像素,并增加延迟,而不是下降130像素。我试着让它上升,thread.sleep,然后让它下降,但是屏幕不刷新,也不工作。例如,我添加了几个sys out,看到它上下浮动,但在thread.sleep期间似乎没有刷新帧Java 有没有办法在我的游戏中增加一个跳远技工?,java,Java,我一直在尝试为矩形(播放器)添加一种方法,使其上升到130像素,并增加延迟,而不是下降130像素。我试着让它上升,thread.sleep,然后让它下降,但是屏幕不刷新,也不工作。例如,我添加了几个sys out,看到它上下浮动,但在thread.sleep期间似乎没有刷新帧 package com.cookie.clicker; import java.awt.EventQueue; import javax.swing.JFrame; import java.awt.Color; im
package com.cookie.clicker;
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class ChromeOfflineGame extends JPanel {
public static Timer t;
static int x = 0;
static int y = 900;
static int width = 1920;
static int height = 250;
static int pX = 50;
static int pY = 800;
static int pW = 50;
static int pH = 100;
static Rectangle ground = new Rectangle(x,y,width,height);
static Rectangle player = new Rectangle(pX,pY,pW,pH);
static JFrame frame = new JFrame();
public ChromeOfflineGame() {
frame.setUndecorated(true);
frame.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode==KeyEvent.VK_ESCAPE) {
System.exit(0);
} else if (keyCode==KeyEvent.VK_SPACE) {
if (player.getY()<ground.getY()) {
//method to jump
}
}
}
});
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ChromeOfflineGame finder = new ChromeOfflineGame();
frame.getContentPane().add(finder);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
t = new Timer(2,(ActionEvent e)->{
finder.redraw();
ground.setBounds(x,y,width,height);
player.setBounds(pX,pY,pW,pH);
});
t.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(1920, 1080);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.green);
g.fillRect (
(int)ground.getX(),
(int)ground.getY(),
(int)ground.getWidth(),
(int)ground.getHeight()
);
g.setColor(Color.black);
g.fillRect((int)player.getX(),(int) player.getY(), (int)player.getWidth(), (int)player.getHeight());
}
public void redraw() {
this.repaint();
}
public void jump() {
//Makes player -=130;
//than makes player +=130;
}
}
package com.cookie.clicker;
导入java.awt.EventQueue;
导入javax.swing.JFrame;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Rectangle;
导入java.awt.event.ActionEvent;
导入java.awt.event.KeyAdapter;
导入java.awt.event.KeyEvent;
导入java.awt.geom.Ellipse2D;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.Timer;
公共类ChromeOfflineGame扩展了JPanel{
公共静态定时器t;
静态int x=0;
静态积分y=900;
静态整数宽度=1920;
静态整数高度=250;
静态int pX=50;
静态int-pY=800;
静态int pW=50;
静态int pH=100;
静态矩形地面=新矩形(x、y、宽度、高度);
静态矩形播放器=新矩形(pX、pY、pW、pH);
静态JFrame=新JFrame();
公共ChromeOfflineGame(){
框架。设置未装饰(真实);
frame.addKeyListener(新的KeyAdapter(){
@凌驾
按下公共无效键(按键事件e){
int keyCode=e.getKeyCode();
if(keyCode==KeyEvent.VK_ESCAPE){
系统出口(0);
}else if(keyCode==KeyEvent.VK_空间){
if(player.getY(){
finder.redraw();
地面.立根(x,y,宽度,高度);
球员退场(pX,pY,pW,pH);
});
t、 start();
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
@凌驾
公共维度getPreferredSize(){
返回新维度(19201080);
}
@凌驾
受保护组件(图形g){
超级组件(g);
g、 setColor(Color.green);
g、 fillRect(
(int)接地。getX(),
(int)ground.getY(),
(int)ground.getWidth(),
(int)ground.getHeight()
);
g、 设置颜色(颜色为黑色);
g、 fillRect((int)player.getX(),(int)player.getY(),(int)player.getWidth(),(int)player.getHeight());
}
公共无效重绘(){
这个。重新绘制();
}
公共跳转{
//使玩家-=130;
//使玩家+=130;
}
}
您必须以这样一种方式执行此操作,即您不会让ui线程等待跳转操作完成。计时器是一种方法。降低y坐标(一次全部或一次一点),当计时器被触发时,再次将其返回。使用计时器是有意义的,但问题是,如何停止它并使其返回?你能展示一些这样的代码示例吗?为什么你不试试计时器,如果你做不到,就用一个问题来回答你的尝试。