博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JetBoy游戏研究
阅读量:6311 次
发布时间:2019-06-22

本文共 4950 字,大约阅读时间需要 16 分钟。

Jet 喷气式(飞机)

1. 在AndroidManifest.xml文件中

// 设定menifest的package属性

package="com.example.android.jetboy"

// application的theme属性设定为没有标题栏

android:theme="@android:style/Theme.NoTitleBar"

// activity(.JetBoy)的屏幕方向设定为水平方向

android:screenOrientation="landscape"

2. 在JetBoy.onCreate方法中

// 获取Jet视图和Jet线程

// private JetBoyView mJetBoyView;

mJetBoyView = (JetBoyView)findViewById(R.id.JetBoyView);

// private JetBoyThread mJetBoyThread;

mJetBoyThread = mJetBoyView.getThread();

// 获取main布局中定义的其他视图

(略)

3. 在res/layout/main.xml文件中

// 使用FrameLayout布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

// 添加JetBoyView视图

   <com.example.android.jetboy.JetBoyView android:id="@+id/JetBoyView"

        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

// 添加“帮助”文本视图 设定为不可见

   <TextView android:id="@+id/text" android:text="@string/helpText"

        style="@style/helpText" android:visibility="invisible"
        android:layout_width="300px" android:layout_height="300px"
        android:background="#7Fffffff" android:layout_gravity="center" />

// 添加“开始”按钮

    <Button android:id="@+id/Button01" android:text="@string/start"

        style="@style/ButtonText" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|bottom" />

// 添加“重新开始”按钮 设定为不可见

    <Button android:id="@+id/Button02" android:text="@string/retry"

        style="@style/ButtonText" android:visibility="invisible"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|bottom" />

// 添加“时间”文本视图 设定为不可见

    <TextView android:id="@+id/timer" android:text="@string/timer"

        style="@style/timerText" android:visibility="invisible"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top|right" android:background="#000000" />

4. 在JetBoyView中

JetBoyView继承SurfaceView 实现SurfaceHolder.Callback

5. 在JetBoyView.GameEvent的构造方法中

// 记录下当前时间

// long eventTime;

eventTime = System.currentTimeMillis();

6. 在JetBoyView.KeyGameEvent中

KeyGameEvent继承GameEvent

// 定义变量keyCode, msg, up; 在构造方法中初始化

public int keyCode;

public KeyEvent msg;
public boolean up;

7. 在JetBoyView.JetGameEvent中

JetGameEvent继承GameEvent

// 定义变量player, segment, track, channel, controller, value; 在构造方法中初始化

public JetPlayer player;

public short segment;
public byte track;
public byte channel;
public byte controller;
public byte value;

8. 在JetBoyView.JetBoyView方法中

// 获取SurfaceHolder 添加Callback监听对象

SurfaceHolder holder = getHolder();

holder.addCallback(this);

// 创建JetBoyThread对象 传递SurfaceHolder对象, Context对象, Handler对象

thread = new JetBoyThread(holder, context, new Handler() {

// 设定Focusable属性为true

setFocusable(true);

9. 在(new)Handler对象的handleMessage(Message m)方法中

// 获取时间 显示在时间文本视图上

mTimerView.setText(m.getData().getString("text"));

// 如果m.getData().getString("STATE_LOSE")不为空

// “重试”按钮可见 “时间”标签不可见 “帮助”标签可见

// 如果mHitTotal大于等于50 提示win

10. 在JetBoyView的重写方法onWindowFocusChanged(boolean hasWindowFocus)

如果hasWindowFocus为true时 调用thread.pause();

11. 在JetBoyView中实现的3个抽象方法

surfaceChanged(SurfaceHolder holder, int format, int width, int height)

surfaceCreated(SurfaceHolder holder)

surfaceDestroyed(SurfaceHolder holder)

12. 在JetBoyView.surfaceChanged方法中

thread.setSurfaceSize(width, height);

13. 在JetBoyView.surfaceCreated方法中

thread.setRunning(true);

thread.start();

14. JetBoyView.surfaceDestroyed方法中

boolean retry = true;

thread.setRunning(false);

每次retry为true时

thread.join();

retry = false;

15. 在JetThread中

// android.media.JetPlayer.OnJetEventListener

JetThread继承Thread 实现OnJetEventListener

// 定义5种状态

public static final int STATE_START = -1;

public static final int STATE_PLAY = 0;
public static final int STATE_LOSE = 1;
public static final int STATE_PAUSE = 2;
public static final int STATE_RUNNING = 3;

16. 在OnJetEventListener中声明4个抽象方法 需要被实现

onJetEvent(JetPlayer player, short segment, byte track, byte channel, byte controller, byte value)

onJetUserIdUpdate(JetPlayer player, int userId, int repeatCount)

onJetNumQueuedSegmentUpdate(JetPlayer player, int nbSegments)

onJetPauseUpdate(JetPlayer player, int paused)

17. 在JetThread构造方法JetBoyThread(SurfaceHolder, Context, Handler)中

// 获取图片

mTitleBG = BitmapFactory.decodeResource(mRes, R.drawable.title_hori);

18. 在JetThread.initializeJetPlayer()方法中

// private JetPlayer mJet = null;

mJet = JetPlayer.getJetPlayer();

// 设置OnJetEventListener监听对象

mJet.setEventListener(this);

// 加载Jet文件

mJet.loadJetFile(mContext.getResources().openRawResourceFd(R.raw.level1));

// 其他

mJet.queueJetSegment(0, 0, 0, 0, 0, sSegmentID);

mJet.queueJetSegment(1, 0, 4, 0, 0, sSegmentID);

mJet.queueJetSegment(1, 0, 4, 1, 0, sSegmentID);

mJet.setMuteArray(muteMask[0], true);

19. 在JetThread.doDraw(Canvas)方法中

// 如果mState等于RUNNING

doDrawRunning(canvas);

// 如果mState等于START

doDrawReady(canvas);

// 如果mState等于PLAY或LOSE

mTitleBG2 = BitmapFactory.decodeResource(mRes, R.drawable.title_bg_hori);

doDrawPlay(canvas);

 

 

转载地址:http://ujxxa.baihongyu.com/

你可能感兴趣的文章
大数据挖掘技术之DM经典模型(上)
查看>>
《Cocos2D权威指南》——2.4 碰撞检测
查看>>
如何无痛集成超融合平台与现有硬件?
查看>>
诺基亚联手欧洲智慧城市交通流量管理测试机构实现安全空中作业
查看>>
《Android程序设计》一3.3 其他Android组件
查看>>
《Linux内核精髓:精通Linux内核必会的75个绝技》一第1章 内核入门
查看>>
step-by-step通过数据集成同步数据到HBase
查看>>
斯坦福最新发布首份AI100报告,2030年我们的生活会是什么样子?
查看>>
Efficient Estimation of Word Representations in Vector Space
查看>>
随机机器学习算法需要试验多少次,才足以客观有效的反映模型性能?
查看>>
大数据风控时代下好车贷等互联网金融平台有哪些特点
查看>>
英特尔将业务重点转移到物联网
查看>>
高通/华为/中兴 5G时代市场格局再预测
查看>>
iOS从0到1搭建高可用App框架
查看>>
科大讯飞智慧医疗事业部空降领头人,深度解析讯飞“AI+医疗”战略
查看>>
StackOverflow转向默认使用HTTPS
查看>>
英特尔稳扎稳打!以色列厂明年初或将导入10纳米
查看>>
Gartner:2020年,云计算安全服务市场将达到近90亿美元
查看>>
国网河南电力探索建设能源大数据中心
查看>>
《React Native移动开发实战》一一第1章 为什么要学习React Native
查看>>