这是我的flash游戏,没有vcam或任何其他屏幕移动方法: http://www.swfcabin.com/open/1389129611 我使用hitTestPoint方法来处理我的碰撞。但是,当我尝试添加vcam时,结果如下: http://www.swfcabin.com/open/1389130109 是奇怪还是什么?我用于vcam的代码是:
stage.addEventListener(Event.ENTER_FRAME,update_vcam);
function update_vcam(e:Event){
vcam.x=char.x;
vcam.y=char.y;
}
vcam的尺寸与舞台完全相同(并且与舞台完全对齐)。我使用了“Jazza”的虚拟相机。我也尝试了许多其他的vcams,但每个人都被证明是混乱的。我曾经在as2天里一直使用vcams,他们总是工作。这不是我尝试过的唯一方法。我也试过移动地面而不是角色。这是结果: http://www.swfcabin.com/open/1389130683 我完全不知道发生了什么。有什么想法吗?
Drake Swartzy
答案 0 :(得分:6)
我不确定vcam是什么,但设置相机实际上非常简单。您需要做的就是将所有游戏对象放在容器中,并根据“摄像机”位置偏移该容器。
例如,您将所有游戏对象都放在名为Sprite
的{{1}}中。在该精灵中,你有另一个名为world
的对象。您需要在此处执行的操作是将char
的{{1}}和x
设置为y
的负位置,再加上屏幕大小的一半以{居中{ {1}}:
world
这可以制成一个简单的相机类型,如下所示:
char
并实施如下:
char
答案 1 :(得分:2)
我无法为您解决此问题,但可以提出更好的解决方案。编写自己的相机类,而不是使用“虚拟相机”,但是甚至不需要是一个类,如果你不想混淆它也可以起作用。
相机实际上不是相机,而是一个观点,所以相反移动相机,你可以把所有东西都放进一个容器中,让我们说一个gameContainer精灵,并像这样移动那个精灵:
gameContainer.x = -char.x + (stage.stageWidth / 2);
gameContainer.y = -char.y + (stage.stageHeight / 2);
这是一种更好的方法,就像在其他游戏中一样,相机并没有真正移动,我们在玩家周围移动“世界”。我还建议编写类并使用AS3.0作为面向对象的语言。面向对象编程为程序员提供了巨大的优势,例如更好的代码视图,分离的类,更易于阅读。试试吧,不是那么难。