返回官网官方微博

麦步社区-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: MAI 表盘
查看: 3558|回复: 3
打印 上一主题 下一主题

小游戏特训开发中遇到的问题

[复制链接]

3

主题

18

帖子

67

麦力

精华
0
阅读权限
100
在线时间
18 小时

麦步极客实验室

跳转到指定楼层
楼主
发表于 2015-11-12 14:52:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jason 于 2015-11-23 15:55 编辑

目前在做一个小游戏——特训,国内也被叫做是男人就坚持20秒
游戏使用bitmap layer来来显示图片。

1. 创建之后的bitmap layer位置可以改变吗?

在文档上看到这个API maibu_layer_get_bitmap_frame()可以获取bitmap layer的GRect
不清楚是否有与这个API配合使用的API?


解决方案:
mark大大回应可以使用app_window_replace_layer()

在第一次将layer加入window的时候,会返回一个layerid
  1. g_plane_layer_id = app_window_add_layer(pwindow, layer);
复制代码

我们只需要创建新的layer,然后通过app_window_get_layer_by_id()拿到旧的layer,在replace即可。
  1. //Move the plane to new position
  2.     P_Layer old_layer = app_window_get_layer_by_id(pwindow, g_plane_layer_id);

  3.     P_Layer layer = planeCreateLayer(PLANEX, PLANEY);
  4.     if (layer != NULL) {
  5.         app_window_replace_layer(pwindow, old_layer, layer);
  6.     }
复制代码


2. 获取随机数

麦步OS中很多c标准库函数都不可用。
所以自己实现了一个简单的伪随机数,虽然分布不是那么均匀,不过对于游戏来说也够用了。

  1. uint8_t math_random(uint8_t seed)
  2. {
  3.     uint8_t num;
  4.     struct date_time t;

  5.     app_service_get_datetime(&t);

  6.     num = (uint8_t)((t.wday * t.hour * t.sec + t.min + seed * t.sec) & 0xff);

  7.     return num;
  8. }
复制代码



3. 计算子弹不同方向上的速度

使用其他方法近似计算得到了一个值,虽然不准确,但是对于游戏来说应该也足够了
  1. <blockquote>int16_t bullet_vx(int8_t x1, int8_t y1, int8_t x2, int8_t y2)
复制代码


4. 碰撞计算

这里将飞机与子弹都简化为一个圆,所以只要计算两者圆心的距离,判断是否小于两圆半径之积即可
  1. uint16_t math_distance(int8_t x1, int8_t y1, int8_t x2, int8_t y2)
  2. {
  3.     int16_t h = x1 - x2;
  4.     int16_t v = y1 - y2;
  5.     return(h*h + v*v);
  6. }
复制代码


5. 同屏子弹数较少

由于每个window最多的layer只能支持20个,而每颗子弹都使用了一个bitmap layer来显示,所以同屏的显示的子弹应该会比较少,从而游戏难度也大大降低。


6. 游戏控制
游戏控制使用加速器控制飞机飞行
使用maibu_get_accel_data()获取不同轴上的加速度
由于加速器比

评分

参与人数 1 +1 收起 理由
陶坤@麦步 + 1 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信 WeiboWeibo
收藏收藏 分享分享 顶 踩

3

主题

118

帖子

1223

麦力

精华
1
阅读权限
150
在线时间
59 小时
沙发
发表于 2015-11-12 15:26:52 | 只看该作者
暂时不能修改指定图层的位置,但是如果你修改图层位置,可以重新创建一个内容一样的图层,但是框架位置和之前不同就可以了,然后使用replace接口替换就行了。

3

主题

18

帖子

67

麦力

精华
0
阅读权限
100
在线时间
18 小时

麦步极客实验室

板凳
 楼主| 发表于 2015-11-12 15:44:36 | 只看该作者
mark 发表于 2015-11-12 15:26
暂时不能修改指定图层的位置,但是如果你修改图层位置,可以重新创建一个内容一样的图层,但是框架位置和之 ...

明白了,感谢mark大大!

3

主题

118

帖子

1223

麦力

精华
1
阅读权限
150
在线时间
59 小时
地板
发表于 2015-11-18 10:29:01 | 只看该作者
不客气,暂时能使用的三角函数只有sin和cos。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|麦步官方论坛 ( 粤ICP备12052190号  

GMT+8, 2024-6-16 21:48 , Processed in 0.088526 second(s), 29 queries .

Powered by Discuz! X3.2

© 2012-2021 Comsenz Inc.

快速回复 返回顶部 返回列表