在我一直从事的这个项目中,玩家在屏幕中心保持静止,而地图根据键盘输入四处移动。-地图是基于瓷砖的;我手动将所有图块放入 1280x896 像素的电影剪辑中,然后脚本将这些图块中的每一个放入一个数组(blockArray)中。从历史上看,我在父脚本和子脚本(Movie Clip tile-holder)之间传递碰撞信息方面一直相当成功,使用点碰撞没有太多麻烦。
- 在更多基于物理的项目中,我在矩形碰撞(getRect 等)方面取得了更大的成功。然而,在这些情况下,我以前从未将它与上述的 Tile Holder/Movie Clip 结合使用。
以下代码作为 MoveBall/Player 脚本的一部分运行,每帧更新一次。当我在测试窗口中运行它时,它总是使程序崩溃 - 也许它无法摆脱“for”循环?
public function moveBall (event:Event)
{
if (lastTime == 0) lastTime = getTimer();
var timePassed:int = getTimer() -lastTime;
lastTime += timePassed;
var newBallX = _Level.x +ballDX*timePassed; //ballDX = ball direction x
var newBallY = _Level.x+ballDY*timePassed; //ballDY = ball direction y
var oldBallRect = new Rectangle(_ball.x-ballRadius, _ball.y-ballRadius, ballRadius*2, ballRadius*2);
var newBallRect = new Rectangle(newBallX-ballRadius, newBallY-ballRadius, ballRadius*2, ballRadius*2); // These correspond to the actual player, which is stationary and 64x64 pixels.
for(var i:int=blockArray.length-1;i>=0;i--)
{
var theBlock = blockArray[i];
var blockRect:Rectangle = getRect(theBlock);
if (blockRect.intersects (newBallRect))
{
//collision treatment here
}
}
}
下面是我一直用来在构造函数中构建关卡的方法:
public function startGame()
{
//constructor code
stage.focus = stage;
if (_Level == null)
{
_Level = new level_obj(); // this Movie Clip, "level_obj", is where the blocks that are loaded into the blockArray reside.
addChild (_Level);
for (var i:int = _Level.numChildren-1;i>=0;i--) // this "for" Loop loads the blocks from inside the _Level Movieclip into the blockArray
{
if (_Level.getChildAt(i) is block_obj)
{
blockArray.push(_Level.getChildAt(i));
}
}
}
我在这里遇到的主要问题getRect(theBlock)
是没有得到应该与 - 碰撞Rectangle
的特定块的。根据我的跟踪,它的大小是 1280x896 - 包含所有块的整个电影剪辑的大小- 而不仅仅是块“(i)”中的一个,它是 64x64。Player/Ball
blockArray(i)
blockRect
blockArray
奇怪的是,我制作了一种标记电影剪辑,它_Level
在碰撞/运动脚本的 for 循环期间添加到电影剪辑中;此影片剪辑始终附加到我放置在那里的第一个块的注册点,而不是_Level
影片剪辑的注册点,它位于 (0,0) 的左上角,并且是getRect
命令的内容参考。
所以,我的问题是:这是一个失败的原因,还是我可以投入或取出一些东西来完成这项工作?
如果我用这种方法浪费时间,那么这些方法中哪一种听起来最可行?
- 使用常规
Array
方法 (newArray = [Block, Block, Block, Lavapit, Block, etc.]
- 级别的构建完全在Game/Constructor
Class 中处理。 - 回点碰撞;不过,不确定这对于基于物理的项目有多好。
- 或者是否有我不知道的替代方法?
任何状况之下; 非常感谢,所有!晚安/早上/下午/晚上。