【问题标题】:Sprite doesn't move in Java 2D game雪碧在 Java 2D 游戏中不动
【发布时间】:2014-09-17 11:55:36
【问题描述】:

我目前的 2d Java 游戏有问题。一切都对我有用,直到最后。当我尝试移动精灵时,没有任何反应。 如果我使用player.setY(player.getY - 5); 而不是player.setVelY(-5);,精灵会移动,但为什么 setVelX 和 setVelY 不起作用? :/

这是我的 KeyInput.java 的一部分

@Override
public void keyPressed(KeyEvent e){
   int key = e.getKeyCode();

   switch(BNeeto.state){
        case MENU:
            break;
        case GAME:
            if(key == KeyEvent.VK_W)
                player.setVelY(-5);
            if(key == KeyEvent.VK_S)
                player.setVelX(5);
            if(key == KeyEvent.VK_A)
                player.setVelY(-5);
            if(key == KeyEvent.VK_D)
                player.setVelX(5);
            break;
        case OPTIONS:
            break;
        case PAUSE:
            break;
        default:
            break;
        }
}

Player.java

package bneeto.entity;

import bneeto.gfx.Texture;
import bneeto.gfx.core.CoreObject;
import java.awt.Graphics;

public class Player extends CoreObject{

  public Player(int x, int y, int id, Texture tex){
    super(x, y, id, tex);
  }

  @Override
  public void tick() {
     x +=  velX;
     y +=  velY;
  }

  @Override
  public void render(Graphics g) {
      g.drawImage(tex.blockStone, x, y, null);
  }
}

【问题讨论】:

  • 尝试减少您提供给与您的问题相关的部分的代码 - 这样问题就太长了,而且很难阅读所有这些代码 -大多数人不会做的工作(这会阻止你的问题得到答案)

标签: java 2d sprite move


【解决方案1】:

我猜你永远不会打电话给tick()

【讨论】:

  • 我很惊讶tick() 并不取决于自上次通话以来经过的时间。
  • @Zhuinden 如果你在一个固定的时间间隔内调用tick,同时确保有足够的性能来保持这个间隔,你在你的tick中不需要任何delta-math(并且你以固定的时间运行帧数)
猜你喜欢
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 2010-10-18
相关资源
最近更新 更多