Flash游戏学习笔记:矩形检测碰撞
2012-02-17 20:10
645 查看
getBounds(targetCoordinateSpace:DisplayObject):Rectangle 返回一个矩形,该矩形定义相对于 targetCoordinateSpace 对象坐标系的显示对象区域。 |
返回一个矩形,该矩形根据 targetCoordinateSpace 参数定义的坐标系定义显示对象的边界,但不包括形状上的任何笔触。
Rectangle | Rectangle 对象是按其位置(由它左上角的点 (x, y) 确定)以及宽度和高度定义的区域。 |
看看下面的代码:
在场景上放了随意两个影片剪辑,分别b1 和b2 在它的属性里面分别写上b1,b2
package
{ //碰撞检测方法
import flash.display.MovieClip;
import flash.events.*;
import flash.geom.Rectangle;
import flash.geom.Point;
public class Example extends MovieClip
{
private var point:Point;
private var rect:Rectangle;
public function Example()
{
init();
}
private function init():void
{
rect=b1.getRect(stage);
trace( rect);
b2.addEventListener(MouseEvent.MOUSE_DOWN,move);
stage.addEventListener(MouseEvent.MOUSE_UP,onup);
b2.addEventListener(Event.ENTER_FRAME,Run);
}
private function move(e:MouseEvent):void
{
point=new Point(e.target.mouseX,e.target.mouseY);
}
private function onup(e:MouseEvent):void
{
point=null;
}
private function Run(e:Event):void
{
if (point!=null)
{
e.target.x=mouseX-point.x; //拖动b2
e.target.y=mouseY-point.y;
var rect2:Rectangle=b2.getRect(stage);
trace( rect2);
if (rect2.intersects(rect))
{
trace("你碰撞了我");
}
}
}
}
}
第一步:我们使用了DisplayObject 类的getRect()方法返回矩形对象。
第二步:同样返回 第二个图形的矩形对象;
第三步:我们进行拖动,将两个物体进行叠加看看是否会发生监测碰撞,
if (rect2.intersects(rect))
{
trace("你碰撞了我");
}
如果rect2.intersects(rect)) 真的就返回 true,并输出碰撞信息
否则不发生碰撞,用这种矩形检测碰撞是一个简单检测碰撞方法。注意:但是对于不规则的图形就不太适合了。
第二段代码:
package
{
import flash.display.MovieClip;
import flash.events.*;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.utils.Timer;
public class Example extends MovieClip
{
private var point:Point;
//private var rect:Rectangle;
private var rect2:Rectangle;
public function Example()
{
init();
}
private function init():void
{
var time:Timer=new Timer(1000);
time.addEventListener(TimerEvent.TIMER,TimeRun);
time.start();
b2.addEventListener(MouseEvent.MOUSE_DOWN,move);
stage.addEventListener(MouseEvent.MOUSE_UP,onup);
b2.addEventListener(Event.ENTER_FRAME,Run);
}
private function TimeRun(e:TimerEvent):void
{
var ball:Ball=new Ball();//库链接
addChild(ball);
ball.x=Math.random()*500;
ball.addEventListener(Event.ENTER_FRAME,Runing);
}
private function Runing(e:Event):void
{
var mc:MovieClip=e.currentTarget as MovieClip;
mc.y+=5;
trace(mc.name);
var rect:Rectangle=new Rectangle(mc.x,
mc.y,
mc.width,
mc.height);
trace(rect);
if (rect2.intersects(rect))
{
trace("你碰撞了我");
mc.parent.removeChild(mc);
mc=null;
}
}
private function move(e:MouseEvent):void
{
point=new Point(e.target.mouseX,e.target.mouseY);
}
private function onup(e:MouseEvent):void
{
point=null;
}
private function Run(e:Event):void
{
rect2=b2.getBounds(stage);
if (point!=null)
{
e.target.x=mouseX-point.x;
e.target.y=mouseY-point.y;
}
}
}
}
根据上面的方法:这里做了一个测试,在库链接添加一个Ball类,通过Timer 函数来每隔一秒产生一个对象,并进行向下运动。通过鼠标拖动对象b2 ,看看和这些复制的对象产生碰撞,如果碰撞了就马上删除了。通过这个实现一些简单的碰撞检测还是很有效果的。而且效率比较高。
扩展:上面可以实现一些简单接金币游戏。
相关文章推荐
- Flash游戏学习笔记:矩形检测碰撞
- Flash游戏学习笔记:矩形检测碰撞
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检测(1)
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第七步--物理碰撞检测(2)--主角吃金币
- cocos2dx游戏开发——微信打飞机学习笔记(十)——碰撞检测的搭建
- flash学习笔记:网页游戏老板键的设置。
- 【COCOS2DX-游戏开发之三六】圆与未旋转矩形的碰撞检测(上篇)
- 2D游戏中的碰撞检测:圆形与矩形碰撞检测(Javascript&C++版)
- cocos2d-x学习笔记番外篇03:坑爹的矩形碰撞
- Flash中使用ActionScript检测圆形和矩形是否碰撞(倾斜矩形)
- 《MFC游戏开发》笔记十 游戏中的碰撞检测进阶:地图类型&障碍物判定
- 【WP7进阶】——XNA游戏平面矩形碰撞检测 推荐
- libgdx游戏引擎开发笔记(十三)SuperJumper游戏例子的讲解(篇七)----各个物体的创建及其碰撞检测
- 学习 Box2D 个人笔记(十)碰撞检测
- 【WP7进阶】——XNA游戏平面矩形碰撞检测
- 《MFC游戏开发》笔记十 游戏中的碰撞检测进阶:地图类型&障碍物判定
- Android游戏开发之碰撞检测(矩形碰撞、圆形碰撞、像素碰撞)
- libgdx游戏引擎开发笔记(十二)SuperJumper游戏例子的讲解(篇六)---- .游戏主人公创建以及碰撞检测
- 《MFC游戏开发》笔记十 游戏中的碰撞检测进阶:地图类型&障碍物判定
- cocos2d-x 菜鸟学习笔记十五(简单的碰撞检测 实践篇 上)