flash中物体运动基础之四---------边界判断

紧接第三部分,现在加上边界,当球体运动碰到边界时,设为初始状态,在场景中放置了一个障碍物,当球体运动碰到障碍物时,随即改变障碍物的位置。

关键代码部分:

private function update(e:Event):void 
		{
			var right:Number = wallRight.x - wallRight.width / 2;
			var top:Number = wallTop.y + wallTop.height / 2;
			var left:Number = wallLeft.x + wallLeft.width / 2;
			var bottom:Number = wallBottom.y - wallBottom.height / 2;
			if (_ball.x + _ball.width / 2 > right)
			{
				_ball.reset(_ballInitX, _ballInitY);
			}
			if (_ball.x-_ball.width/2<left)
			{
				_ball.reset(_ballInitX,_ballInitY);
			}
			if (_ball.y+_ball.height/2>bottom)
			{
				_ball.reset(_ballInitX, _ballInitY);
			}
			if (_ball.y-_ball.height/2<top)
			{
				_ball.reset(_ballInitX, _ballInitY);
			}
			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;
			}
		}

wallLeft,wallRight,wallTop,wallBottom分别为舞台上的四面墙,用于检测球体运动的位置,当球碰到任何一面墙时,设置球为初始位置(此处也可以设置球为反方向运动)。

left,right,top,bottom分别表示球体在舞台上能运动的最左最右最上最下的位置。

coin为舞台上的一个障碍物,当球体碰到它是会随机改变位置。

 

总结:

当Ball不是规则的物体时,此方法不适用!此处关键点在判断球体出边界时的坐标计算,还有随机设置障碍物的位置也要注意考虑障碍物自身的注册点。

 

posted @ 2010-07-27 00:33  ywxgod  阅读(673)  评论(0编辑  收藏  举报