JAVA 2D滚动游戏布局和碰撞检测障碍

时间:2014-02-17 10:17:08

标签: java android eclipse collision-detection

我对Android应用程序有个好主意。我的大问题: 我是JAVA的“初学者”。我在IT大学有Java,但那是绝对的基础知识! 通常我正在开发.Net。

我做了一个垂直滚动的2D游戏: Splashscreen(没有概率) 主菜单(无疑问) 级别概述(无概率) 游戏本身(大概率:))

垂直滚动:我可以做到,足够的教程 游戏地图和障碍(没办法)

如何创建地图(右侧和左侧有墙) 中间部分可以自由地玩障碍物。

(例如)有一个球落下,当球从顶部边界到来时,你必须以正确的方式转动球。

如何检测黑墙和红色障碍物的碰撞? (这就是一个例子,不包括纹理)

不要忘记,它会向下移动。我和AndEngine一起想着相机......

图像:

https://www.dropbox.com/s/kzafsb041po9jc7/Unbenannt-2.png

2 个答案:

答案 0 :(得分:1)

  

如何创建地图

在屏幕上还是在内存中?

  • Jogl,lwjgl,..有太多东西你可以在屏幕上开始一个opengl绘图。(也许AndEngine更好我不知道),你需要使用opengl的版本兼容功能。
  • 如果您需要在内存中生成墙信息,您可以使用与高度图重叠的简单函数。你需要计算表面法线才能把东西放在别人之上。(我不确定android设备是否能够实现高分辨率的实时性能)

例如,从正弦波开始,

enter image description here

在其上添加方波,

enter image description here

重叠案例:

enter image description here

添加随机高度贴图,您可以获得具有随机性的墙的一侧,并且您可以仅使用一行或两行代码生成它(如果您需要节省CPU周期而不是内存空间,则可以保存坐标):

enter image description here

  

如何检测碰撞

您需要基于事件还是直接检测?

  • 先验检测:你用球的速度矢量方向射出球上的假想射线。测试光线交叉点的墙壁和红色障碍物坐标。如果它相交,它将知道在n个时间步之后球将碰撞的物体。 (如果一切都没有改变)你可以尝试多种射线测试工作背景,例如第一次测试射击从当前位置的射线,下一次测试射击从下一个位置的球,接下来是下一个,... 好:你会在碰撞前知道,所以你可以“及时”停止它。你可以计算碰撞后球的跳跃位置!即使是连续的碰撞。坏:需要更多的cpu周期,递归可以扼杀性能。不止一个移动物体会以指数方式增加复杂性。

在拍摄光线之前在单独的物体坐标缓冲区上使用“计数排序”算法可以使跟踪更快。

  • 后验检测很简单,因为只检查球的坐标是否适合任何其他物体坐标的公差间隔。 好:这是最简单的。坏:它已经相撞了。可能会发生故障或爆炸,您需要将球放回合理的位置。如果背后的物理学很好,你就不需要重新定位。 排斥力可以从截断的指数势或一些简单的阶跃函数导出。

如果物体数量很高,两种类型都需要加速结构。 (KD-tree帮助)

  • 您可以对碰撞区域进行硬编码。每个新对象都将为实现添加另一行代码。需要最少的CPU周期。 (例如,用于检查位置是墙位置还是任何其他障碍物的碰撞图,1用于碰撞,0用于非碰撞,50x400的1s和0s的地图不应填充太多内存)

答案 1 :(得分:0)

更多信息:

予。使用Andengine

https://github.com/nicolasgramlich/AndEngine https://github.com/nicolasgramlich/AndEngineExamples

android app关于示例:find" Andengine示例"在Google Play中

II。碰撞检测

关键部分:collidesWith方法 例如:

if(line.collidesWith(face)) {

     line.setColor(1, 0, 0);

  } else {

     line.setColor(0, 1, 0);

  }

III。 LevelLoader(适用于xml)是Andengine的一部分。你可以使用它。

ps:我必须为我的游戏创建一个自己的地图编辑器(在Google Play:" Pirates:Captain Jack"),我将值保存到xml文件。

实现编辑器有点耗时,但值得。