(尝试二号......)
所以,我已经开始在AS3中编写游戏。我正在寻找一种方法来创建一个平滑的,基于平铺的运动系统,就像在口袋妖怪游戏或其他游戏中看到的那样。我可以减少或增加球员位置的x或y值,但我遇到了一些问题。第一个是在聚会中不止一个人,他们并不真正关注玩家。当他们向左移动时,他们只是留在他们后面(我设置它的方式)。当我向上移动时,它们会保持在玩家旁边,同样向下移动,当他们向右移动时,他们会保持在玩家面前。有可能我可以制作一个标题为#34; char"采取运动命令," char2"等等,远离播放器留下一定数量的瓷砖。
谢谢, 雅各布
编辑:对不起!忘了附上代码。它现在在下面!import flash.events.Event;
import flash.events.KeyboardEvent;
stage.addEventListener(Event.ENTER_FRAME, cameraFollowplayeracter);
function cameraFollowplayeracter(evt:Event)
{
root.scrollRect = new Rectangle(char.x - stage.stageWidth/2, char.y - stage.stageHeight/2, stage.stageWidth, stage.stageHeight);
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyReleased);
addEventListener(Event.ENTER_FRAME, gameLoop);
var score = 0;
var charSpeed = 6;
char.x = 128;
char4.x = char.x + 14;
char.y = 96;
char4.y = char.y;
var charFacing = 0;
//charFacing works as the following:
//0 = down, 1 = up, 2 = left, and 3 = right
char.gotoAndStop("charDown");
char4.gotoAndStop("char4Down");
var isLeftKeyDown = false;
var isRightKeyDown = false;
var isUpKeyDown = false;
var isDownKeyDown = false;
function onKeyPressed(evt:KeyboardEvent)
{
if(evt.keyCode == Keyboard.LEFT)
{
isLeftKeyDown = true;
charFacing = 2;
char.gotoAndStop ("charLeft");
char4.gotoAndStop("char4Left");
}
if(evt.keyCode == Keyboard.RIGHT)
{
isRightKeyDown = true;
charFacing = 3;
char.gotoAndStop ("charRight");
char4.gotoAndStop("char4Right");
}
if(evt.keyCode == Keyboard.UP)
{
isUpKeyDown = true;
charFacing = 1;
char.gotoAndStop ("charUp");
char4.gotoAndStop("char4Up");
}
if(evt.keyCode == Keyboard.DOWN)
{
isDownKeyDown = true;
charFacing = 0;
char.gotoAndStop ("charDown");
char4.gotoAndStop("char4Down");
}
}
function onKeyReleased(evt:KeyboardEvent)
{
if(evt.keyCode == Keyboard.LEFT)
{
isLeftKeyDown = false;
}
if(evt.keyCode == Keyboard.RIGHT)
{
isRightKeyDown = false;
}
if(evt.keyCode == Keyboard.UP)
{
isUpKeyDown = false;
}
if(evt.keyCode == Keyboard.DOWN)
{
isDownKeyDown = false;
}
}
function gameLoop(evt:Event)
{
scoreDisplay.x = char.x - 120;
scoreDisplay.y = char.y - 90;
if(char.hitTestObject(cheese) && cheese.visible == true)
{
cheese.visible = false;
score = score + 100;
scoreDisplay.text = "SCORE:" + score;
}
if(isLeftKeyDown == true)
{
char.x-=charSpeed;
char4.moveTo(char + 14);
}
if(isRightKeyDown == true)
{
char.x+=charSpeed;
char4.x+=charSpeed;
}
if(isUpKeyDown == true)
{
char.y-=charSpeed;
char4.y-=charSpeed;
}
if(isDownKeyDown == true)
{
char.y+=charSpeed;
char4.y+=charSpeed;
}
}
答案 0 :(得分:0)
我只是快速浏览了你的代码,但是,我的想法是,如果你想让一个角色跟随你的角色,一种方法可以是缓存/保存该玩家的最后一步并让角色跟随你移动,而不是使用播放器的相同当前移动。
答案 1 :(得分:0)
原来是一个非常有趣的问题。 首先,你要做的是将NPC运动与你的主角分开。
即。你现在正在做什么:按下键 - 字符面向某个方向和运行,键释放 - 字符停止。所有角色都在同一时间完成。
需要什么:按下键 - 仅限主角运行,键释放 - 仅限主角停止。其他角色(NPC)必须不是由关键事件控制,而是由他们自己的逻辑控制。它们可以在主角出现时运行,也可以在主角出现时立即运行。他们也可以面对与领导者不同的方向。
那么,我该怎么办呢?
1)定义一些编队。阵型是你的角色围绕你的主角扮演的一种方式。它可以通过不同的方式设置,但最实用的是我认为的3x3矩阵。它可以容纳多达8个NPC。例如,这是常设形式:
1 2 3
4 & 5
6 7 8
此处&
表示您的主角和其他角色(1..8)正站着。如果字符较少,则可以将格式定义为
1
2 & 3
4
等。或者你可以选择阵型中随机空置的地方。 现在,当玩家开始移动时,阵型会发生变化:
1 2 3
4 5 &
6 7 8
这当然是向右移动的。相应地,以下是其他方向的示例:
& 1 2 1 & 2 1 2 & 1 2 3 1 2 3
3 4 5 3 4 5 3 4 5 4 5 6 4 5 6
6 7 8 6 7 8 6 7 8 7 & 8 7 8 &
等等。请注意,您还可以使用任何自定义构造用于不同的方向,例如,向右移动可以如下所示:
1
2 6
3 7 &
4 8
5
下一步,每个阵型都需要编码。地层中的每个位置都与引导字符位置有相对偏移。从上面的例子中,位置6具有偏移(-1,-1),位置7具有偏移(-1,0),位置8具有偏移(-1,1)等。因此每个形成都可以这样编码。
现在是主要部分。一旦主角开始移动,为给定方向选择合适的阵型。为每个NPC分配一个位置(可以从空位列表中随机选择)。
现在,当主角移动时,你应该取其坐标并检查每个NPC它们的形成位置与这些坐标的距离。如果is比该位置的偏移编码更接近,则停止并且不执行任何操作。如果距离更远,则根据差异(可能与引导字符方向不同)定义方向并开始向该方向移动。
逻辑是这样的: