平台游戏:屏幕移动方法不起作用

时间:2014-01-07 22:40:22

标签: actionscript-3 flash

这是我的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

2 个答案:

答案 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作为面向对象的语言。面向对象编程为程序员提供了巨大的优势,例如更好的代码视图,分离的类,更易于阅读。试试吧,不是那么难。