Flash游戏:让世界变得连续,圆形

时间:2014-02-08 05:08:23

标签: actionscript-3 flash map 2d-games

我现在正在写一个Flash游戏,我遇到了一个问题。我有一个游戏地图,定义为二维数组,其中每个元素代表地图的一个组成部分。玩家总是在地图的中心。

问题在于玩家到达地图的一端。现在它是空的空间。我想要玩家而不是看到空的空间,看到地图的另一端,这样,地图会像它四处走动一样。

因此,例如,如果玩家向右走,他最终会看到地图的左侧,并且世界将看起来是连续的。

有谁知道如何实现此功能?

3 个答案:

答案 0 :(得分:1)

您只需检查您的玩家是否即将离开地图的“右”或“左”边缘,并将他定位在另一边。要绘制圆形贴图,可以使用以下技术:如果要绘制一个超出贴图宽度的数字列,请按宽度减少该数字,并在结果索引处绘制该列;如果您要在零以下的索引处绘制列,请添加宽度并在结果索引处绘制列。如果你在连续地图的边界处制作一个hitcheck的麻烦,你可以使用相同的技巧来找到邻居。 (“循环数组”是一个非常基本的算法问题,并且已经以多种方式解决了)

答案 1 :(得分:1)

这里有几个选项。你可以做一个只让你的角色弹出屏幕另一边的pac-man风格,但这需要你随时放弃中间人物的冷静位置。

关于真正的建议:

如果你没有将数组实现为一个实体对象(即一次绘制单个的collumns /行),那么这是一个明智的选择。只需要一个函数,在某些范围内返回下一个列/行的索引。比如,如果你的数组是40个元素宽,当它试图绘制元素41时,减去数组的大小,然后使它绘制元素1。

如果你的数组是一个实体对象(比如你把它绘制到舞台对象上并且只是操纵它)并且它不是很大,你可能可以完全绘制它们中的四个,并且只有一个新的掩盖任何即将出现的空白。就像,当你接近第一个数组的右边缘时,第二个数组移动到它的右边,进行无法无天的过渡。

如果你的数组是一个实体并且非常大,也许你可以制作8个缓冲对象(每个边一个,每个角一个),它可以容纳大约半个屏幕的数值。当你接近右边缘时,你会看到左边缘,但是当你进入缓冲区时,你可以将玩家传送到数组左边的相应位置,该位置具有适当大小的缓冲区。对于玩家来说,没有任何改变,但现在他们在世界的另一边。

答案 2 :(得分:1)

您可以将数组制作2次,然后将第一个数组放在第二个数组后面,而将第二个数据放在第一个数据后面等等。

这里完成了2张图片,只需使用数组:

//The speed of the scroll movement.
var scrollSpeed:uint = 2;

//This adds two instances of the movie clip onto the stage.
var s1:ScrollBg = new ScrollBg();
var s2:ScrollBg = new ScrollBg();
addChild(s1); 
addChild(s2);

//This positions the second movieclip next to the first one.
s1.x = 0;
s2.x = s1.width;

//Adds an event listener to the stage.
stage.addEventListener(Event.ENTER_FRAME, moveScroll); 

//This function moves both the images to left. If the first and second 
//images goes pass the left stage boundary then it gets moved to 
//the other side of the stage. 
function moveScroll(e:Event):void{
s1.x -= scrollSpeed;  
s2.x -= scrollSpeed;  

if(s1.x < -s1.width){
s1.x = s1.width;
}else if(s2.x < -s2.width){
s2.x = s2.width;
}
}