基于图块的等距游戏中的自由运动


9

在基于图块的等距游戏中,有没有合理的简便方法来实现自由移动?这意味着玩家不仅会立即从一个图块跳到另一个图块,或者不会被“捕捉”到网格(例如,如果图块之间的移动已设置动画,但是在动画完成之前您将被禁止执行任何操作)。我真的是一个与游戏编程有关的初学者,但是借助此站点和其他资源,可以很轻松地完成基本的工作,但是我无法针对此特定问题找到任何有用的资源。 。

目前,我已经简化了一些与此相关的东西:http//jsfiddle.net/KwW5b/4/(WASD运动)。移动的想法是使用鼠标地图来检测玩家何时移动到另一个图块,然后翻转偏移量,并且在大多数情况下可以正常工作(每个角使玩家移动到错误的位置:请参阅http: //www.youtube.com/watch?v=0xr15IaOhrI,这可能是因为我无法使完整的鼠标图正常工作),但是我并不幻想它甚至接近一个好的/理智的解决方案。而且无论如何,这主要只是为了演示我想实现哪种类型的东西。


该代码看起来不错,到底出了什么问题?您相当谦虚(以一种很好的方式),您的代码看起来还不错,演示中缺少什么功能?
AturSams 2012年

我所说的最严重的问题是这种行为:youtube.com/watch?v=0xr15IaOhrI。除了要对有问题的偏移量进行大量的if-check之外,我无法提出任何其他解决方案,即使如此,在某些特殊情况下,玩家也会翘曲到错误的位置。但是就像我说的那样,我想知道这种运动通常是如何实现的,因为我还没有看到我想出的方法可以在其他地方使用。
xtr486 2012年

Answers:


10

首先,我建议您更改方向:W-左上S-右下A-左下D-右上

变得更直观:W-上S-下A-左D-右

关于您的担忧,我建议您执行两个功能,一个将等轴测图的平铺坐标转换为网格坐标,另一个则将其转换。这样,您可以简单地分离MVC,并且在计算活动磁贴时将使您的生活更轻松: 在此处输入图片说明


1
您的回答看起来确实很有希望,但我承认很多答案都超出了我的脑海。但是,在接下来的几天中,我将尝试继续消化您的解决方案。这附近有没有你想要的地方?jsfiddle.net/Sd4ZP/18它确实存在一些逻辑错误(等等),但是据我所知,自顶向下和等轴测图的运动相同。我还没有得到解决,就是如何将瓦片从顶向下偏移等距翻译..
xtr486

到目前为止看起来还不错!我晚上去看看。问题是将等距图块绘制方法中的转换应用到positionToUser()转换函数中,并在positionFromUser()方法中将其求逆。
Markus von Broady

我看到了问题:您通过放置图像而不是使用画布绘制API来绘制等轴测图。这很合乎逻辑,因为最终,您的izo瓷砖将比纯色好得多。但是,对于调试,您还应该在磁贴之间绘制线条,这将使您的生活更加轻松。无论如何,我分叉了您的代码并创建了positionToUser(x,y)翻译函数。通过将黑色正方形居中放置在瓷砖上进行测试(因为在iso视图中它始终居中),然后将鼠标移到底部画布上-转换后的点将显示在izo画布上:jsfiddle.net/tZTXS/1
Markus von Broady

谢谢!实际上,我本人设法推断出(也可以说是某种东西),即drawIsometric函数中的等距偏移量。现在看起来像这样:jsfiddle.net/P2eKF/4,它似乎和我在原始问题中提出的一样,所以我会标记您的答案。:)
xtr486

我很高兴你做到了!我喜欢WA,WD,AS,SD键组合如何将运动对准等距轴而不是45度角。辛苦了
Markus von Broady,2012年

0

据我了解,您希望播放器一次又一次地移动,但不要跳跃。您可以:

1-从图块t0开始并偏移0

2-当玩家移至图块t1时,将偏移量设置为-(t1-t0)

3-在播放器更新中,如果偏移量不为0,则使用更新时间和播放器速度递减。

amount = deltatime * playerSpeed
deltaoff = sqrt(offsetX*offsetX + offsetY*offsetY)
total = min( amount, deltaoff )
offsetX = offsetX - (total * offsetX / deltaoff)
offsetY = offsetY - (total * offsetY / deltaoff)

4- Yo可以使用offset == 0进行检查,以了解播放器何时在图块上。

有了这个,您将获得一个玩家可以在地图上自由移动,但可以紧贴瓷砖。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.