我发布了一个问题并获得了工厂的回答。
我接受了他们的建议并试图实现一个计时器来让我的Java游戏循环。
public static void run()
{
init();
long lastTime = System.nanoTime();
final double amountOfTicks = 60D;
double ns = 1000000000/ amountOfTicks;
double delta = 0;
while(running)
{
long now = System.nanoTime();//gets time from pc in nano seconds
//tick();//this is the problem, slow computer will slow things down
delta += (now - lastTime) / ns;
lastTime = now;
if(delta >=1)
{
tick();//limited to 60 times a second
delta--;
}
render();//render and draw graphics many times a second// as fast as we can
}
stop();
}
public void tick()
{
//update all game components
runTimer();
}
public void render()
{
//draw the images
//first time game runs
BufferStrategy bs = this.getBufferStrategy();
if(bs == null)//bs equalnothing create
{
createBufferStrategy(3);
return;//exit render method until called again
}
Graphics g = bs.getDrawGraphics();//paint brush, paints all sorts, draw text lines images etc. paint brush yeah
//render here i guess
createGUI();
//end the render please
g.dispose();
bs.show();
}
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Cannot make a static reference to the non-static method init() from the type CbabyBall
Cannot make a static reference to the non-static method tick() from the type CbabyBall
Cannot make a static reference to the non-static method render() from the type CbabyBall
Cannot make a static reference to the non-static method stop() from the type CbabyBall
我已经尝试通过查看oracle和其他示例来植入计时器,但是我实现的代码不喜欢它。
我所拥有的是鼠标点击,当你点击一个网格(2D数组)时,玩家X和Y位置应该到达那个位置。
private void runTimer()
{
if(BPOS_X!=MOUSE_X && BPOS_Y != MOUSE_Y){
if(BPOS_X<MOUSE_X)
{
if(MOUSE_X+1==this)
{
//moveBallR();
//moveRight();
moveUp();
}
else
{
moveRight();
}
}
if(BPOS_X>MOUSE_X)
{
moveLeft();
}
if(BPOS_Y<MOUSE_Y)
{
moveDown();
}
if(BPOS_Y>MOUSE_Y)
{
moveUp();
}
}
else if(BPOS_X==MOUSE_X && BPOS_Y == MOUSE_Y)
{
}
}
我尝试在循环中捕获它,Eclipse已经崩溃,我太害怕再次尝试循环。
有人可以给我一个治疗之手吗?
public class CbabyBall extends JFrame
public KeyListener listenKey;
public ActionListener listenAction;
public ChangeListener listenChange;
答案 0 :(得分:2)
如果你提供的后一个代码实际上是在一个循环中,你就会立即出现问题;如果鼠标不在同一个地方,它总会移动。
其次,最有可能的问题是init()
实际上并不是一个静态方法,你将其称为run one;这会导致冲突,因为您没有明确地将init()
更改为静态,静态方法中的所有变量必须具有静态访问修饰符。
如果run不是静态方法,那么我会改变它。你可以改变它的方式是这样的:
class Main {
public Thread runThread = new Thread() {
public void run() {
//Put Code Here...
}
}
public static void main(String args[]) {
Main m = new Main();
m.runThread().start();
}
}
希望这有助于:)
P.S @HoverCraftFullOfEels意味着你不应该专注于你应该做的计时器,确实在你做其他任何事情之前确保你的其余代码有效
P.P.S以下是JPanel扩展的工作原理:
`class mainRun extends JPanel {
public void paintComponent() {//Code In Here}
public static void main(String args[]) {
JFrame frame = new JFrame("Title");
//JFrame Code
mainRun mr = new mainRun();
KeyEvent event = new KeyEvent() {
//Default Code
}
frame.add(mr);
frame.addKeyListener(event);
}
}
`
答案 1 :(得分:2)
你说:
我所拥有的是鼠标点击,当你点击一个网格(2D数组)时,玩家X和Y位置应该到达那个位置。
这听起来不像是需要一个游戏循环&#34;一点都不这种行为所需要的只是一个MouseListener,就是这样。
另外,为了重申我的评论,我担心你在最近的另一个问题中收到的建议不是好建议,因为他们建议你使用带有Swing应用程序的java.util.Timer
,这可能很危险。通常情况下,最好使用javax.swing.Timer
也称为&#34; Swing Timer&#34;。
为了获得更好的建议,您需要提供有关您尝试创建的更多详细信息。
修改强>
你说:
我想要刷新我的Jpanel,让它看起来好像广场正在移动到那个位置。
这样做 - 在MouseListener中。