今天教程之家给大家带来新的Android游戏开发之旅系列,主要从控制方法(按键、轨迹球、触屏、重力感应、摄像头、话筒气流、光线亮度)、图形View(高效绘图技术如双缓冲)、音效(游戏音乐)以及最后的OpenGL ES(Java层)和NDK的OpenGL和J2ME游戏移植到Android方法,当然还有一些游戏实现惯用方法,比如地图编辑器,在Android OpenGL如何使用MD2文件,个部分讲述下Android游戏开发的过程最终实现一个比较完整的游戏引擎。相信大家都清楚Android Market下载量比较好的都是游戏,未来手机网游的发展相信Android使用的Java在这方面有比iPhone有更低的入门门槛。
对于很多游戏使用屏幕控制一般需要考虑长按事件,比如在动作类的游戏中需要长按发射武器,结合Android Button模型,我们实现一个带图片的Button的长按,为了更清晰的显示原理,Android开发网这里使用ImageButton作为基类。
Android游戏开发之旅一 长按Button原理
public class RepeatingImageButton extends ImageButton {
private long mStartTime; //记录长按开始
private int mRepeatCount; //重复次数计数
private RepeatListener mListener;
private long mInterval = 500; //Timer触发间隔,即每0.5秒算一次按下
public RepeatingImageButton(Context context) {
this(context, null);
}
public RepeatingImageButton(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.imageButtonStyle);
}
public RepeatingImageButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setFocusable(true); //允许获得焦点
setLongClickable(true); //启用长按事件
}
public void setRepeatListener(RepeatListener l, long interval) { //实现重复按下事件listener
mListener = l;
mInterval = interval;
}
@Override
public boolean performLongClick() {
mStartTime = SystemClock.elapsedRealtime();
mRepeatCount = 0;
post(mRepeater);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) { // 本方法原理同onKeyUp的一样,这里处理屏幕事件,下面的onKeyUp处理Android手机上的物理按键事件
removeCallbacks(mRepeater);
if (mStartTime != 0) {
doRepeat(true);
mStartTime = 0;
}
}
return super.onTouchEvent(event);
}
//处理导航键事件的中键或轨迹球按下事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
super.onKeyDown(keyCode, event);
return true;
}
return super.onKeyDown(keyCode, event);
}
//当按键弹起通知长按结束
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
removeCallbacks(mRepeater); //取消重复listener捕获
if (mStartTime != 0) {
doRepeat(true); //如果长按事件累计时间不为0则说明长按了
mStartTime = 0; //重置长按计时器
}
}
return super.onKeyUp(keyCode, event);
}
private Runnable mRepeater = new Runnable() { //在线程中判断重复
public void run() {
doRepeat(false);
if (isPressed()) {
postDelayed(this, mInterval); //计算长按后延迟下一次累加
}
}
};
private void doRepeat(boolean last) {
long now = SystemClock.elapsedRealtime();
if (mListener != null) {
mListener.onRepeat(this, now - mStartTime, last ? -1 : mRepeatCount++);
}
}
下面是重复Button Listener接口的定义,调用时在Button中先使用setRepeatListener()方法实现RepeatListener接口
public interface RepeatListener {
void onRepeat(View v, long duration, int repeatcount); //参数一为用户传入的Button对象,参数二为延迟的毫秒数,第三位重复次数回调。
}
}
分享到:
相关推荐
Android游戏开发之旅系列将涵盖多种控制方法,包括按键、轨迹球、触屏、重力感应、摄像头、话筒气流和光线亮度。这些输入方式为游戏设计提供了丰富的交互可能,例如: - **触屏**:触屏是最常用的控制方式,适用于...
今天Android123开始新的Android游戏开发之旅系列,主要从控制方法(按键、轨迹球、触屏、重力感应、摄像头、话筒气流、光线亮度)、图形View(高效绘图技术如双缓冲)、音效(游戏音乐)以及最后的OpenGL ES(Java层)和NDK...
Android123 的"Android游戏开发之旅"系列教程详细介绍了如何实现这一功能,特别是针对游戏场景,如长按发射武器等操作。以下是对长按Button原理和实现方式的深入解析: 首先,我们要了解Button的基本属性。Button是...
《Cocos2d-x 3.x游戏开发之旅》是一本专为游戏开发者设计的详细教程,旨在引导读者深入了解和掌握Cocos2d-x 3.x框架进行游戏开发的技术与实践。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动平台,如iOS、...
《Cocos2d-Js开发之旅-从HTML5到原生手机游戏》是一本深入探讨Cocos2d-Js框架的书籍,旨在帮助开发者从HTML5游戏开发过渡到原生移动平台的游戏制作。Cocos2d-Js是Cocos2d-x家族的一员,是一个跨平台的、基于...
《Android游戏开发实践指南》是由Rick Rgers撰写的一本深入探讨Android游戏开发的专业书籍,主要聚焦于使用...通过深入学习和实践,你将能够创造出引人入胜且运行流畅的移动游戏,开启你的Android游戏开发之旅。
整体而言,《Cocos2d-x游戏开发之旅》是一本非常适合游戏开发入门者及中级开发者的教程,特别是那些对Cocos2d-x引擎、Android游戏开发和面向对象编程感兴趣的读者。本书不但涵盖了Cocos2d-x的使用方法和游戏开发的...
在Android游戏编程的世界里,开发者需要掌握一系列技术来构建引人入胜的移动...在本教程的“Android游戏编程基础”中,你将找到更多关于这些主题的详细讲解,包括实例代码和实战指导,帮助你踏上Android游戏开发之旅。
Libraries层是Android系统的关键组件,包含了一系列C/C++库,供系统和开发者使用。这些库包括系统C库、媒体库(如OpenCORE,支持多媒体播放和录制)、界面管理库、Web浏览器引擎(如LibWebCore)、2D和3D图形库(如...
Cocos2d-js是Cocos2d-x家族的一员,是一个跨平台的游戏开发框架,它将JavaScript与C++相结合,使得开发者能够用JavaScript编写游戏,并在HTML5、Android和iOS等多平台上运行。本教程旨在深入解析Cocos2d-js的使用...
本教程将引导你快速掌握AndEngine的基础知识和核心功能,助你开启Android游戏开发之旅。 一、AndEngine的安装与设置 在开始使用AndEngine前,你需要将其导入到Android Studio项目中。这通常通过添加依赖库到项目的...
在“通往Android的神奇之旅”系列教程中,第十二章主要聚焦于JPush,这是一个针对Android平台的实时、可靠的推送服务。JPush是极光公司提供的一个强大的移动推送解决方案,它能够帮助开发者有效地与用户进行互动,...
"通往Android的神奇之旅 第五章Animation"这一章节,旨在深入讲解Android系统中的动画技术,帮助开发者掌握如何为应用添加动态效果,使得交互更加生动有趣。在这个章节中,你将学到以下核心知识点: 1. **基础动画...
本章将详细介绍如何搭建用于创建Catcake-Android游戏的开发环境,这包括安装必要的软件、配置开发工具以及设置项目结构。以下将逐步展开这个过程。 1. **安装Java Development Kit (JDK)** 开发Android应用离不开...
OpenGL ES是Android平台上进行2D和3D图形渲染的核心库,尤其在游戏开发中不可或缺。本教程将聚焦于Android上的OpenGL ES 3D游戏开发,介绍如何设置OpenGL ES视图,这是任何图形...祝你在OpenGL ES开发之旅中取得成功!
参与项目开发:老人系列工具箱应用开发、奇遇社群应用程序开发、大稻旅图Beacon创新应用开发、Crazy Yummy暴食专家手机游戏开发、千变万话手机游戏开发、手势操控跨平台办公室数据中控系统开发、配对式交友手机社群...
《Android游戏示例详解》 在移动平台的开发领域,Android以其开源性和广泛的设备支持,成为了游戏开发者的重要选择。...通过深入研究这些例子,开发者能够快速提升自己的技能,为自己的游戏开发之旅打下坚实的基础。
《Cocos2d-android-1:开启Android游戏开发之旅》 Cocos2d-android-1是一套专为Android平台设计的游戏开发课程资源,它基于Cocos2d引擎,旨在帮助开发者掌握游戏开发的核心技术和流程。Cocos2d是一款广泛使用的开源...
《Beginning Android Games, 2nd Edition》是一本深入浅出的Android游戏开发指南,由Mario Zechner与Robert Green合著。本书旨在帮助读者构建针对Android智能手机和平板电脑的游戏应用程序,涵盖了从基础知识到高级...