flash中物体运动基础之五---------障碍物
障碍物有的可以运动有的不能运动,如:可以把墙壁看出不能运动的障碍物,移动的另一个球体看出运动的障碍物。运动过程中要检测球体是否与障碍物接触,可以用hitTestObject方法或者hitTestPoint方法。
接着第四部分,修改update函数。在舞台上增加了obstruction1,obstruction2,obstruction3。
obstruction1为上下运动的矩形
obstruction2为舞台下方的浅蓝色矩形,模拟液体物质。
obstruction3为转动的矩形
private function update(e:Event):void
{
hitTestObstruction3();
if (
wallLeft.hitTestObject(_ball) ||
wallRight.hitTestObject(_ball) ||
wallTop.hitTestObject(_ball)||
wallBottom.hitTestObject(_ball) ||
obstruction1.hitTestObject(_ball)
)
{
_ball.reset(_ballInitX, _ballInitY);
_score-= 2;
}
hitTestCoin();
hitTestObstruction1();
hitTestObstruction2();
updateScore();
}
private function updateScore():void
{
scoreText.text = _score.toString();
}
private function hitTestObstruction3():void
{
obstruction3.rotation += 0.5;
if (obstruction3.hitTestPoint(_ball.x,_ball.y,true))
{
_ball.reset(_ballInitX, _ballInitY);
_score-= 2;
}
}
private function hitTestObstruction2():void
{
if (obstruction2.hitTestObject(_ball))
{
_ball.vx = _ball.vx / 1.2;
_ball.vy = _ball.vy / 1.2;
}
}
private function hitTestCoin():void
{
_right = wallRight.x - wallRight.width / 2;
_top = wallTop.y + wallTop.height / 2;
_left = wallLeft.x + wallLeft.width / 2;
_bottom = wallBottom.y - wallBottom.height / 2;
var dx:Number = (_ball.x-coin.x) * (_ball.x-coin.x);
var dy:Number = (_ball.y-coin.y) * (_ball.y-coin.y);
var dist:Number = (_ball.width / 2 + coin.width / 2) * (_ball.width/2+coin.width/2);
if (dx+dy<=dist)
{
coin.x = Math.random() * (_right-2*coin.width/2 - _left) + _left+coin.width/2;
coin.y = Math.random() * (_bottom - 2 * coin.height / 2 - _top) + _top + coin.height / 2;
_score += 3;
}
if (obstruction1.hitTestObject(coin))
{
coin.x = Math.random() * (_right-2*coin.width/2 - _left) + _left+coin.width/2;
coin.y = Math.random() * (_bottom - 2 * coin.height / 2 - _top) + _top + coin.height / 2;
}
}
private function hitTestObstruction1():void
{
var top:Number = _top + obstruction1.height / 2;
var bottom:Number = _bottom - obstruction1.height / 2;
var dist:Number = bottom - top;
obstruction1.y = stage.stageHeight/2+dist/2 * Math.sin(t);
t += 0.05;
}
由于使用的是hitTestPoint和hitTestObject,限制很大,且导致检测碰撞不精确,如果要更精确的碰撞检测可以尝试使用Box2dAs3来改写,以后有时间再来改吧,这里只是记录一些简单的方式检测的代码。
作者:ywxgod
E-mail:给我发邮件
出处:http://ywxgod.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
E-mail:给我发邮件
出处:http://ywxgod.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号