【发布时间】:2018-01-23 14:52:17
【问题描述】:
我正在创建一个游戏,并且想读取角色类中角色的玩家输入。我不知道这是否是游戏开发的好习惯,但这似乎是合乎逻辑的事情。
我的 Player 类中有以下代码(包括相关代码),但我怀疑它不能正常工作,因为它不是主要视图类或其他什么?感谢所有帮助。 播放器
public class Player implements View.OnTouchListener{
private static Player instance = null;
int x, y;
boolean moveRight = false;
Bitmap sprite;
public Player (Context context){
sprite = BitmapFactory.decodeResource(context.getResources(), R.drawable.test_sprite);
x = 300;
y = 0;
}
public void Update(){
if (moveRight){
x += 3;
} else {
x -= 3;
}
}
public static Player getInstance(Context context) {
if (instance == null){
instance = new Player(context);
}
return instance;
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
float x = motionEvent.getX(), y = motionEvent.getY();
switch (motionEvent.getAction() & motionEvent.getActionMasked()){
case MotionEvent.ACTION_DOWN:
moveRight = true;
break;
case MotionEvent.ACTION_UP:
moveRight = false;
break;
}
return true;
}
}
游戏视图
public class GameView extends SurfaceView implements Runnable {
private boolean running = true;
SurfaceHolder surfaceHolder = getHolder();
SimpleTurret simpleTurret;
Player player;
private Thread thread = new Thread(this);
public GameView (Context context){
super(context);
simpleTurret = SimpleTurret.getInstance(context);
player = Player.getInstance(context);
thread.start();
}
@Override
public void run() {
while (running){
DrawCanvas();
Control();
}
}
public void DrawCanvas(){
Canvas canvas = surfaceHolder.lockCanvas();
if (surfaceHolder.getSurface().isValid()){
canvas.drawColor(Color.RED);
canvas.drawBitmap(simpleTurret.getSprite(), simpleTurret.getX(), simpleTurret.getY(), null);
canvas.drawBitmap(player.getSprite(), player.getX(), player.getY(), null);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
public void Control(){
try{
thread.sleep(17);
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
【问题讨论】:
-
你是对的。它不起作用的原因是因为您的
Player类不是视图 -
那么,将需要触摸的类作为 View 类的子类是游戏开发的标准做法吗?
-
不一定,但
View.onTouchListener只能在视图上实现。播放器类的目的是什么?只是实现View.onTouchListener只提供了一个函数但是你需要将监听器绑定到一个View -
如果可行的话,我可以将监听器绑定到我的 GameView 类,该类将我的所有精灵都绘制到屏幕上?我的玩家类拥有自己的信息,例如健康、速度、x/y 位置、用于碰撞的矩形等。我还想用它来注册玩家的玩家输入。
-
是的,onTouchListener 将进入 GameView 类,然后您将其绑定到其中的视图。如果您可以显示该代码,那么我可以提供帮助