- 浏览: 578719 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 1792显示网页: 1. Uri uri = Uri.parse( ... -
AlarmManager.RTC和ELAPSED_REALTIME的区别
2012-02-16 14:08 1702AlarmManager.RTC,硬件闹钟,不唤醒手机 ... -
Android文字居中
2012-02-14 11:09 5941在宽width高height的画布上画一字符串,使字符串水平竖 ... -
在Android中实现service动态更新UI界面
2011-05-13 09:40 2622http://mobile.51cto.com/android ... -
在Android开发中使用Gallery实现“多级联动”
2011-05-13 09:39 1150http://mobile.51cto.com/hot-230 ... -
Android手势识别ViewFlipper触摸动画
2011-05-13 09:30 1209http://mobile.51cto.com/hot-232 ... -
android开发过程中遇到的一些问题(包括自定义ProgressBar, Intent, Animation, ListView, RadioButton)
2011-05-13 09:20 1828问题如下: 1.在自定义的ListView中,在一个It ... -
android获取屏幕尺寸、密度
2011-04-27 14:29 1284有些时候,我们需要获取Android手机或Pad的屏幕的物理尺 ... -
Java压缩技术相关
2011-04-27 14:27 894http://snowolf.iteye.com/blog/4 ... -
java synchronized详解
2011-04-22 17:00 841http://www.cnblogs.com/GnagWang ... -
Android 2.2中的APK安装参数installLocation
2011-04-16 13:04 2033在Android 2.2中新的特性可以支持类似APP2SD卡上 ... -
解决EditText在光标位置插入字符串,光标不会往后挪动的方法
2011-04-13 16:06 1704EditText editor = (Ed ... -
activity事件对应的生命周期
2011-04-12 16:05 1574启动应用 onCreate onStart ... -
Android放大镜的实现
2011-04-12 12:54 1072http://www.eoeandroid.com/threa ... -
Android应用程序级的变量
2011-04-12 12:52 1026Android 应用程序开发中,有的时候我们在应用程序 ... -
介绍一个fanqiang软件,很好用,youtube都很流畅
2011-04-07 23:09 267www.tbsvpn.com -
Android软件权限知识普及
2011-04-07 09:11 1139随着Android日趋红火,其用户 数也节节上升,同时 ... -
Android屏幕的控制
2011-04-06 16:23 1084一、AndroidManifest.xml对Activity屏 ... -
关于工程会丢失R文件的问题
2011-03-31 09:16 1218工程会丢失R文件的问题,一个可能的原因:资料文件命名不正确,例 ... -
关于layout_weight
2011-03-30 11:32 866layout_weight 用于给一个线性布局中的诸多视图的重 ...
相关推荐
J2me-Layermanager中使用游戏精灵与不同图层发生碰撞并检测
J2ME游戏中的碰撞检测。主要是用于手机游戏中
J2ME 手机游戏,关于碰撞检测的教学用代码,供新手参考。
Java FlyGeneral J2me碰撞检测游戏源码,得到图片以帧为单位的一个数据图片,碰撞检测 *@parameter ax ay aw ah 分别是a矩形的左顶点X Y坐标和矩形的 长和宽 *若返回真则为碰撞 *返回为假则为不碰撞 *@...
绍j2me手机游戏中的碰撞检测问题
J2me 捉鬼游戏源代码,地图数据定义,0-空地 1-...角色类:角色状态 0-停止 1-走路 2-中招,停止走路时的帧序列,改变精灵的帧序列,dir 方向0-上 1-下 2-左 3-右,另外还有角色控制、碰撞检测等方面的Java类,值得学习。
本人编写的一个j2me游戏,其中有游戏精灵,双缓冲技术,线程的应用,碰撞检测等,其中处理了游戏声音!适合初学者!
J2ME是Java2的一个重要组成部分,它...本文设计的推箱子游戏是一个基于J2ME的游戏,并且对以往推箱子游戏使用优化方法提高了游戏的性能,主要包括:双缓存技术、游戏关卡设计优化、图片优化、部分重绘、简化碰撞检测。
J2ME碰砖块游戏Java源码,碰撞检测游戏,主Display 对象及根据需要重载的canvas对象,调试开关,置为true后可输出调试信息,实用Canvas类包含图形控制及游戏逻辑,砖块列表_1,游戏中撞球和击球板的实例,让砖块的多...
这是本人利用MIDP2.0技术制作的一个RPG游戏实例,实现了人物在地图场景中的走动与碰撞检测功能。
一个用J2ME做的非常简单的小游戏。一开始敌人追你,吃到食物后,变大追敌人。游戏很简单,AI也不复杂,就是坐标比较,还有两圆的碰撞检测和圆与矩形的碰撞检测。
┌第四章 j2me游戏开发基础 ┃4.1 游戏画布的使用 ┃4_2.游戏精灵的使用 ┃4_3.图层管理器的使用 ┃4_4.游戏精灵旋转和其他方法 ┃4_5.碰撞检测 ┃4_6.游戏贴图的使用 ┃第四章教程打包下载 ┗━━━━━━━━━━...
实现了一个小人推动多个箱子,共设定了10个关卡,每关通过后,会出现一个入口,可以进入下一关的游戏。游戏中有重新开始,可以...游戏中对小人,墙壁,多个箱子之间均进行了碰撞检测。代码可以在eclipse上运行成功。
这个一个RPG游戏的源代码,本游戏使用了四个代码类,Hero类创建人物精灵,Map类实现了地图和障碍物的创建,GameCanvas类实现函数执行和碰撞检测以及音乐的播放,MIdlet类执行程序
j2me新手学习全套示例源代码,一些必备的代码,包括人物移动、接口使用、地图绘制、Sprite类的使用、碰撞检测、Sprite怪物行走等,不过从代码来看,好像是一个完整的游戏分解来的。
Java J2ME飞行射击类游戏源码,射击类游戏,飞机飞行射击,躲避攻击,同时发炮弹轰炸目标,可通过本源码学习下碰撞检测、飞行控制、发火躲避等方面的游戏技巧,源码发布于前些年,有些老。
23GameAPI2:Sprite碰撞检测和动画 24:GameAPI3:TiledLayer和图层管理 网络应用开发 18网络编程1:Socket编程 19案例4:聊天室开发 20网络编程2:UDP编程 21网络编程3:HTTP编程 RMS开发 15RMS编程1:基础知识 16RMS编程2:...
可以实现菜单选项,敌方的碰撞检测,在手机模拟器上可以正确运行。
郭克华-J2ME移动开发实战教学视频() 全部课程内容: 1. 体系介绍和环境配置 2. 高级界面开发1基本界面和Command ...23.GameAPI 2Sprite碰撞检测和动画 24. GameAPI 3TiledLayer和图层管理 25. J2ME代码优化
j2me开发的飞机游戏,MIDP2.0写的飞机,包括飞机游戏的所有要素,换关,计数,爆炸效果,碰撞检测,刷不同的敌机,最重要的敌机的不同方阵不同时间出现。。