`
kevin2562
  • 浏览: 118326 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android游戏开发之旅系列一

阅读更多
今天教程之家给大家带来新的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游戏开发之旅[借鉴].pdf

    Android123 的"Android游戏开发之旅"系列教程详细介绍了如何实现这一功能,特别是针对游戏场景,如长按发射武器等操作。以下是对长按Button原理和实现方式的深入解析: 首先,我们要了解Button的基本属性。Button是...

    Cocos2d-x 3.x游戏开发之旅_PDF电子书下载 带书签目录 高清完整版

    《Cocos2d-x 3.x游戏开发之旅》是一本专为游戏开发者设计的详细教程,旨在引导读者深入了解和掌握Cocos2d-x 3.x框架进行游戏开发的技术与实践。Cocos2d-x是一个开源的游戏开发框架,广泛应用于移动平台,如iOS、...

    《Cocos2d-Js开发之旅-从HTML5到原生手机游戏》完整源码

    《Cocos2d-Js开发之旅-从HTML5到原生手机游戏》是一本深入探讨Cocos2d-Js框架的书籍,旨在帮助开发者从HTML5游戏开发过渡到原生移动平台的游戏制作。Cocos2d-Js是Cocos2d-x家族的一员,是一个跨平台的、基于...

    android游戏开发实践指南 爱飞翔

    《Android游戏开发实践指南》是由Rick Rgers撰写的一本深入探讨Android游戏开发的专业书籍,主要聚焦于使用...通过深入学习和实践,你将能够创造出引人入胜且运行流畅的移动游戏,开启你的Android游戏开发之旅。

    Cocos2d-x游戏开发之旅

    整体而言,《Cocos2d-x游戏开发之旅》是一本非常适合游戏开发入门者及中级开发者的教程,特别是那些对Cocos2d-x引擎、Android游戏开发和面向对象编程感兴趣的读者。本书不但涵盖了Cocos2d-x的使用方法和游戏开发的...

    Android游戏编程之二(Android游戏编程基础)

    在Android游戏编程的世界里,开发者需要掌握一系列技术来构建引人入胜的移动...在本教程的“Android游戏编程基础”中,你将找到更多关于这些主题的详细讲解,包括实例代码和实战指导,帮助你踏上Android游戏开发之旅。

    Android开发之旅(2):android架构宣贯.pdf

    Libraries层是Android系统的关键组件,包含了一系列C/C++库,供系统和开发者使用。这些库包括系统C库、媒体库(如OpenCORE,支持多媒体播放和录制)、界面管理库、Web浏览器引擎(如LibWebCore)、2D和3D图形库(如...

    Cocos2d-js项目教程和Cocos2d-JS开发之旅 从HTML 5到原生手机游戏 PDF 带书签目录 完整版

    Cocos2d-js是Cocos2d-x家族的一员,是一个跨平台的游戏开发框架,它将JavaScript与C++相结合,使得开发者能够用JavaScript编写游戏,并在HTML5、Android和iOS等多平台上运行。本教程旨在深入解析Cocos2d-js的使用...

    Android 2D游戏引擎AndEngine快速入门教程

    本教程将引导你快速掌握AndEngine的基础知识和核心功能,助你开启Android游戏开发之旅。 一、AndEngine的安装与设置 在开始使用AndEngine前,你需要将其导入到Android Studio项目中。这通常通过添加依赖库到项目的...

    通往Android的神奇之旅 第十二章JPush.rar

    在“通往Android的神奇之旅”系列教程中,第十二章主要聚焦于JPush,这是一个针对Android平台的实时、可靠的推送服务。JPush是极光公司提供的一个强大的移动推送解决方案,它能够帮助开发者有效地与用户进行互动,...

    通往Android的神奇之旅 第五章Animation.rar

    "通往Android的神奇之旅 第五章Animation"这一章节,旨在深入讲解Android系统中的动画技术,帮助开发者掌握如何为应用添加动态效果,使得交互更加生动有趣。在这个章节中,你将学到以下核心知识点: 1. **基础动画...

    catcake-android 3D游戏编程 第一章 catcake-android环境搭建

    本章将详细介绍如何搭建用于创建Catcake-Android游戏的开发环境,这包括安装必要的软件、配置开发工具以及设置项目结构。以下将逐步展开这个过程。 1. **安装Java Development Kit (JDK)** 开发Android应用离不开...

    android开发之OpenGL ES教程

    OpenGL ES是Android平台上进行2D和3D图形渲染的核心库,尤其在游戏开发中不可或缺。本教程将聚焦于Android上的OpenGL ES 3D游戏开发,介绍如何设置OpenGL ES视图,这是任何图形...祝你在OpenGL ES开发之旅中取得成功!

    unity2d 游戏开发资源 unity2d 游戏开发资源

    参与项目开发:老人系列工具箱应用开发、奇遇社群应用程序开发、大稻旅图Beacon创新应用开发、Crazy Yummy暴食专家手机游戏开发、千变万话手机游戏开发、手势操控跨平台办公室数据中控系统开发、配对式交友手机社群...

    Android Game Examples

    《Android游戏示例详解》 在移动平台的开发领域,Android以其开源性和广泛的设备支持,成为了游戏开发者的重要选择。...通过深入研究这些例子,开发者能够快速提升自己的技能,为自己的游戏开发之旅打下坚实的基础。

    cocos2d-android-1

    《Cocos2d-android-1:开启Android游戏开发之旅》 Cocos2d-android-1是一套专为Android平台设计的游戏开发课程资源,它基于Cocos2d引擎,旨在帮助开发者掌握游戏开发的核心技术和流程。Cocos2d是一款广泛使用的开源...

    Beginning Android Games, 2nd Edition

    《Beginning Android Games, 2nd Edition》是一本深入浅出的Android游戏开发指南,由Mario Zechner与Robert Green合著。本书旨在帮助读者构建针对Android智能手机和平板电脑的游戏应用程序,涵盖了从基础知识到高级...

    Apress.Beginning.Android.Games

    《Apress.Beginning.Android.Games》是一本专为Android游戏开发者设计的详尽指南,由Mario Zechner撰写。...无论是初学者还是有一定经验的开发者,都能从本书中获取宝贵的知识和灵感,开启自己的Android游戏开发之旅。

Global site tag (gtag.js) - Google Analytics