- 浏览: 585194 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (182)
- android/ophone开发完全讲义 (4)
- android常用代码 (6)
- android工具 (9)
- android基础 (40)
- android进阶 (75)
- android经验记录 (3)
- android框架 (2)
- android面经 (5)
- android网络 (5)
- android资讯 (0)
- android资源 (17)
- 生活印象 (3)
- androidNDK (4)
- android开源 (1)
- android性能优化 (1)
- android设计 (2)
- android博客论坛收集 (1)
- android手机用户体验 (1)
- android动画 (1)
- android外文资料 (1)
- 汉字排序 (1)
最新评论
-
小猫咪201:
困惑了很久,终于找到答案了
一个常见的android内存泄露 问题 -
王雪龙:
pixels = dps * (density / 160). ...
关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi -
Turr:
楼主给力,解决了我遇到的问题
解决ActivityGroup的sub Activity中spinner的WindowManager$BadTokenException的问题 -
boyuan2000cn:
你好,我转载了您的此篇博客,如果有版权问题,请告诉我,谢谢!转 ...
关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi -
twlkyao:
请教您个问题,如何将drawable对象转换为id类型?
Android中Bitmap, Drawable, Byte,ID之间的转化
我们在游戏开发中总会遇到这样那样的碰撞
,
并且会很频繁的去处理这些行为
.
这也是游戏开发的一种基本的算法
.2D
的相对
3D
的要简单的多了,最简单的就是矩形碰撞
\
圆形碰撞
,
像素碰撞。矩形碰撞用的最多
我就简单总结一点我的认识,对于矩形碰撞
.
我们就把游戏中的角色统称为一个一个的
Actor,
并且把每个
Actor
框成一个与角色大小相等的矩形框,那么在游戏中每次的循环检查就是围绕每个
Actor
的矩形框之间是否发生了交错。为了简单起见,我们就拿一个主角与一个
Actor
来分析,其它的可以类似。
一个主角与一个
Actor
的碰撞其实就成了两个矩形的检测,是否发生了交集。
第一种方法:
我们可以通过检测一个矩形的
4
个顶点是否在另外一个矩形的内部来完成。代码如下:
我们简单的设定一个
Actor
类:
public
class
Actor {
int
x
,
y
,
w
,
h
;
public
int
getX() {
return
x
;
}
public
int
getY() {
return
y
;
}
public
int
getActorWidth() {
return
w
;
}
public
int
getActorHeight() {
return
h
;
}
}
检测的处理为:
public boolean isCollidingWith (int px ,int py){
if(px > getX() && px < getX() + getActorWidth()
&&
px > getY() && px < getY() + getActorHeight())
return true;
return false;
}
public boolean isCollidingWith(Actor another) {
if(isCollidingWith(another.getX(),another.getY())
||isCollidingWith(another.getX()+ another.getActorWidth(),another.getY())
||isCollidingWith(another.getX(),another.getY()+another.getActorHeight())
||isCollidingWith(another.getX()+ another.getActorWidth(),another.getY()+another.getActorHeight())
)
return true;
return false;
}
以上处理运行应该是没有什么问题的,但是没有考虑不到运行速度,而游戏中需要大量的碰撞检测工作,所以要求碰撞检测要尽量的快。
第二种方法:
我们从相反的角度考虑,以前是想什么时候相交,现在我们处理什么时候不会相交,可以处理
4
条边,
a
b
左边
a
矩形的右边界在
b
矩形的左边界以外,同理,
a
的上边界需要在
b
的下边界以外,四边都判断,则可以知道
a
是否与
b
相交,代码:
/**
*
ax
a
矩形左上角
x
坐标
*
ay
--
a
矩形左上角
y
坐标
*
aw
--
a
矩形宽度
*
ah
--
a
矩形高度
*
*
bx
--
b
矩形左上角
x
坐标
*
by
--
b
矩形左上角
y
坐标
*
bw
--
b
矩形宽度
*
bh
--
b
矩形高度
*
*
*/
public
boolean
isColliding(
int
ax,
int
ay,
int
aw,
int
ah,
int
bx,
int
by,
int
bw,
int
bh){
if
(ay > by + bh || by > ay + ah
|| ax > bx + bw || bx > ax + aw)
return
false
;
return
true
;
}
此方法比第一种简单且运行快。
第三种方法:
这种方法其实可以说是第二种的一个变异,我们可以保存两个矩形的左上和右下两个坐标的坐标值,然后对两个坐标的一个对比就可以得出两个矩形是否相交。这应该比第二种更优越一点。
/*
* rect1[0]:
矩形
1
左上角
x
坐标
* rect1[1]:
矩形
1
左上角
y
坐标
* rect1[2]:
矩形
1
右下角
x
坐标
* rect1[3]:
矩形
1
右上角
y
坐标
*
* rect2[0]:
矩形
2
左上角
x
坐标
* rect2[1]:
矩形
2
左上角
y
坐标
* rect2[2]:
矩形
2
右下角
x
坐标
* rect2[3]:
矩形
2
右上角
y
坐标
*/
static
boolean
IsRectCrossing (
int
rect1[],
int
rect2[])
{
if
(rect1[0] > rect2[2])
return
false
;
if
(rect1[2] < rect2[0])
return
false
;
if
(rect1[1] > rect2[3])
return
false
;
if
(rect1[3] < rect2[1])
return
false
;
return
true
;
}
这种速度应该很快的了,推荐使用这种。
第四种方法:(类似于圆形与圆形)
现在介绍一种测试两个对象边界是否重叠。可以通过比较两个对象间的距离和两个对象半径的和的大小,很快实现这种检测。如果它们之间的距离小于半径的和,就说明产生了碰撞。
为了计算半径,就可以简单的取高度或者宽度的一半作为半径的值。
代码如下:
public static boolean isColliding ( int ax,int ay,int aw, int ah,
int bx, int by, int bw, int bh){
int r1 = (Math.max(aw, ah)/2 + 1);
int r2 = (Math.max(bw, bh)/2 + 1);
int rSquard = r1 * r1;
int anrSquard = r2* r2;
int disX = ax - bx;
int disY = ay - by;
if((disX * disX) + (disY * disY) < (rSquard + anrSquard))
return true;
else
return false;
}
这种方法类似于圆形碰撞检测。处理两个圆的碰撞处理就可以用这种。
以上只是总结了几种简单的方法,当然其实在游戏中熟练的运用才是最好的,在
J2ME
中差不多以上几种算够了,它不需要太精密的算法,当然可能有些需要比以上更复杂,例如如果一个对象速度足够快的,
发表评论
-
android 常用uri
2012-02-16 14:16 1836显示网页: 1. Uri uri = Uri.parse( ... -
AlarmManager.RTC和ELAPSED_REALTIME的区别
2012-02-16 14:08 1747AlarmManager.RTC,硬件闹钟,不唤醒手机 ... -
Android文字居中
2012-02-14 11:09 5965在宽width高height的画布上画一字符串,使字符串水平竖 ... -
在Android中实现service动态更新UI界面
2011-05-13 09:40 2658http://mobile.51cto.com/android ... -
在Android开发中使用Gallery实现“多级联动”
2011-05-13 09:39 1190http://mobile.51cto.com/hot-230 ... -
Android手势识别ViewFlipper触摸动画
2011-05-13 09:30 1252http://mobile.51cto.com/hot-232 ... -
android开发过程中遇到的一些问题(包括自定义ProgressBar, Intent, Animation, ListView, RadioButton)
2011-05-13 09:20 1864问题如下: 1.在自定义的ListView中,在一个It ... -
android获取屏幕尺寸、密度
2011-04-27 14:29 1314有些时候,我们需要获取Android手机或Pad的屏幕的物理尺 ... -
Java压缩技术相关
2011-04-27 14:27 933http://snowolf.iteye.com/blog/4 ... -
java synchronized详解
2011-04-22 17:00 883http://www.cnblogs.com/GnagWang ... -
Android 2.2中的APK安装参数installLocation
2011-04-16 13:04 2060在Android 2.2中新的特性可以支持类似APP2SD卡上 ... -
解决EditText在光标位置插入字符串,光标不会往后挪动的方法
2011-04-13 16:06 1733EditText editor = (Ed ... -
activity事件对应的生命周期
2011-04-12 16:05 1615启动应用 onCreate onStart ... -
Android放大镜的实现
2011-04-12 12:54 1112http://www.eoeandroid.com/threa ... -
Android应用程序级的变量
2011-04-12 12:52 1060Android 应用程序开发中,有的时候我们在应用程序 ... -
介绍一个fanqiang软件,很好用,youtube都很流畅
2011-04-07 23:09 267www.tbsvpn.com -
Android软件权限知识普及
2011-04-07 09:11 1174随着Android日趋红火,其用户 数也节节上升,同时 ... -
Android屏幕的控制
2011-04-06 16:23 1115一、AndroidManifest.xml对Activity屏 ... -
关于工程会丢失R文件的问题
2011-03-31 09:16 1257工程会丢失R文件的问题,一个可能的原因:资料文件命名不正确,例 ... -
关于layout_weight
2011-03-30 11:32 908layout_weight 用于给一个线性布局中的诸多视图的重 ...
相关推荐
在这个专题中,我们将深入探讨J2ME中的`LayerManager`及其在碰撞检测中的应用。 首先,我们要理解`LayerManager`的基本概念。在2D游戏开发中,图层是一种将不同游戏元素分组的机制,使得它们可以独立地移动和更新,...
在J2ME游戏中,由于硬件资源有限,高效的碰撞检测算法显得尤为重要。 碰撞检测是指在游戏世界中检测两个或多个对象是否发生接触的过程。在J2ME中,这通常涉及到对图形元素(如角色、敌人、障碍物等)的矩形边界进行...
在Java Micro Edition (J2ME) 平台上开发游戏或者应用程序时,碰撞检测是一个非常重要的技术环节。它用于判断游戏中的对象(如角色、敌人、障碍物等)是否发生接触,进而实现游戏逻辑,比如得分计算、触发事件或执行...
这个"j2me透明泡泡碰撞算法小演示"项目提供了一个简单的实例,展示了如何在受限的资源环境下实现动态物体的碰撞检测。 首先,让我们了解一下透明泡泡的实现。在J2ME中,创建透明泡泡可能涉及到使用PNG或GIF格式的...
游戏中的碰撞检测、AI算法和网络对战功能也是重点讲解的内容。 在“J2ME Game Programming.chm”这个文件中,很可能包含了教程的完整文本,以CHM(Compiled HTML Help)格式呈现,这种格式便于阅读和搜索。"打开...
5. **游戏物理系统**:介绍基本的物理规则,如碰撞检测、重力模拟,以及如何在J2ME中实现这些物理效果。 6. **音频和多媒体**:讨论如何在J2ME游戏中集成音频效果,包括背景音乐和音效的播放,以及如何处理多媒体...
2. **物理模拟**:引擎可能集成物理模拟库,如Box2D或JBox2D,用于处理碰撞检测、重力和其他物理效果,使游戏更加真实。 3. **音频管理**:音频播放和管理是游戏体验的重要部分。J2ME游戏引擎会提供接口,支持背景...
同时,碰撞检测是确保游戏交互性的重要部分,开发者需要了解不同的碰撞检测算法。 7. **数据持久化**: 游戏进度、用户设置等数据通常需要存储在本地,J2ME 提供 RecordStore API 来进行数据存储和读取。 8. **网络...
在J2ME(Java Micro Edition)游戏开发中,碰撞检测是一项关键的技术,它主要...因此,要成为一名优秀的J2ME游戏开发者,不仅要掌握这些基础算法,还需不断学习和研究更高级的碰撞检测技术,以应对各种复杂的游戏场景。
在这个类中,可能会有处理碰撞检测、更新游戏世界、计分系统等功能。在J2ME游戏中,为了保持流畅性,通常会有一个游戏循环(Game Loop)来持续刷新游戏状态。 4. **MessageScreen.java** 这个文件可能定义了一个...
6. **游戏逻辑**:游戏的核心部分是逻辑处理,这通常涉及到碰撞检测、AI算法、计分系统等。这些可以通过编写复杂的程序逻辑来实现,需要扎实的编程基础。 7. **网络通信**:J2ME支持HTTP和WAP协议,使得游戏可以...
"j2me游戏(源码齐全)"这个资源提供了丰富的 J2ME 游戏源代码,对于想要学习 J2ME 或者游戏开发的初学者来说,这是一个非常宝贵的资料库。 首先,我们来关注一下“疯狂老鼠”这个游戏。这可能是一款基于 J2ME 的...
在"J2ME游戏开发中的地图设计与绘制.txt"文件中,可能详细讲解了如何规划地图结构,如何使用二维数组存储地图数据,以及如何利用J2ME的图形API高效地渲染地图。同时,文件可能还讨论了如何实现动态加载和滚动地图,...
3. **碰撞检测**:游戏中的物体交互往往需要进行碰撞检测,以确定是否发生接触。这通常涉及到几何学算法,如轴对齐边界框(AABB)或更复杂的碰撞模型。 4. **资源管理**:在资源有限的移动设备上,有效管理内存和...
10. **J2me手机游戏捉鬼源代码**:捉鬼游戏是一个典型的追逐类游戏,源码中包含了如何创建动态的游戏环境和追踪机制,是学习J2ME游戏物理引擎和碰撞检测的好材料。 以上每个游戏的源代码都可以作为J2ME游戏开发的...
开发者可以通过查看源代码来学习J2ME游戏开发的具体实现,包括类的设计、方法的实现以及游戏逻辑的编写。这对于初学者来说是一份宝贵的实践教程,可以深入理解J2ME平台的游戏编程技巧和最佳实践。 总结来说,这个...
2. **碰撞检测**:在游戏中,物体之间的碰撞检测是常见的,J2ME提供了一些基本的方法,但可能需要自定义算法来优化性能。 3. **动画**:通过改变帧率和利用缓动函数,可以实现平滑的动画效果。 4. **音频播放**:...
为了实现动态效果,开发者需要掌握如何使用定时器更新画面,实现帧动画,以及如何高效地处理碰撞检测和游戏逻辑。 **游戏循环** 一个标准的J2ME游戏通常包含一个游戏循环,这个循环负责处理输入、更新游戏状态、...
除此之外,优化是J2ME游戏开发中不可忽视的一环。由于移动设备性能有限,我们需要关注内存管理、减少绘图开销、合理安排线程等,确保游戏运行流畅。 总结来说,通过J2ME开发飞机游戏,开发者需要掌握MIDP和CLDC的...