Android简单游戏框架结构六

本文详细解释了游戏开发中如何在框架中仅处理触屏事件,并通过实例展示了如何将屏幕坐标转换为缓冲屏幕坐标。文章还介绍了不同状态下事件处理的方法,包括加载、Logo、菜单、游戏和结束等状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

►事件处理

在框架中,仅需要对触屏事件进行转换后交给子类处理。而按键事件可以直接由子类进行,框架内不需要对其进行处理后再交由子类。因此,GamesurfaceView仅对onTouchEvent()进行重写。

在onTouchEvent()中,需要创建一个新的Event并将系统获取的Event复制到新的Event中,然后改变其当前的触发位置。其位置的横坐标应如下计算:

新横坐标 = 原始横坐标 * renderWidth / actulWidth

即将屏幕坐标转换为缓冲屏幕(或称标准屏幕)坐标。纵坐标的操作与此类似。然后再将该新生成的Event分发给不同状态的处理方法并检查是否需要进行手势处理。

onTouchEvnet代码如下:

public boolean onTouchEvent(MotionEvent event) {
MotionEvent renderEvent = MotionEvent.obtain(event);
renderEvent.setLocation(event.getX() * renderWidth / actulWidth, event.getY() * renderHeight / actulHeight);
boolean isUsed = false;
switch(gameState){
case GAMESTATE_LOADING:
isUsed = loadingTouchEvent(renderEvent);
break;
case GAMESTATE_LOGO:
isUsed = logoTouchEvent(renderEvent);
break;
case GAMESTATE_MENU:
isUsed = menuTouchEvent(renderEvent);
break;
case GAMESTATE_PLAY:
isUsed = playTouchEvent(renderEvent);
break;
case GAMESTATE_END:
isUsed = endTouchEvent(renderEvent);
break;
}
if (!isUsed && isUseGesture) {
return gestureDetector.onTouchEvent(renderEvent);
}
return isUsed;
}

其中loadingTouchEvent()、logoTouchEvent()、menuTouchEvent()、playTouchEvent()、endTouchEvent()分别为不同状态下,子类需要进行事件处理的抽象方法。在其后讲解的抽象方法的定义中将会介绍这些方法的定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值