【问题标题】:trouble setting boundaries in a game in isometric view?在等轴测视图的游戏中设置边界有问题吗?
【发布时间】:2015-05-26 00:35:01
【问题描述】:

我正在尝试在等轴测视图中编写游戏,但我不确定如何设置适当的边界来阻止玩家离开棋盘。棋盘的形状像棋盘。

if keys[K_LEFT] and guyX > 50: #guyX is the player's x cord
        guyX -= 10
if keys[K_RIGHT] and guyX < 1010:
        guyX += 10
if keys[K_DOWN] and guyY < 680: #guyY is the player's y cord
        guyY += 10
if keys[K_UP] and guyY > 200:
        guyY -= 10

我的棋盘从 50,440 到 530,200 到 1010,440 再到 530,680 我想阻止我的玩家离开棋盘,我可以对我的代码设置哪些其他限制来阻止玩家这样做?

【问题讨论】:

  • 玩家的位置不应该在游戏板坐标中吗?然后是针对游戏板边缘的简单测试。
  • 我不知道你所说的游戏板线是什么意思...你的意思是 mx,my?
  • @KarinaMeowmeow 我认为 Jongware 建议您将屏幕坐标(我猜是您给我们的)转换为板上的坐标,然后您可以在那里进行边界检查. (这会更容易,因为它是一个正方形。)

标签: python math isometric


【解决方案1】:

正如 Jongware 所说,在游戏板坐标上工作并从这些坐标转换为屏幕坐标会容易得多。

如果您的游戏板在 x 方向上从 0 到 8,在 y 方向上从 0 到 8,您将需要像这样的变换

screen_x = screen_x0 + u_x * game_x + v_x * game_y
screen_y = screen_y0 + u_y * game_x + v_y * game_y

你的情况

screen_x0 = 50
screen_y0 = 440
u_x = (530 - 50) / 8
u_y = (200 - 200) / 8
v_x = (1010 - 530) / 8
v_y = (440 - 200) / 8

让游戏协调起来

det = u_x * v_y - u_y * v_x
x1 = screen_x - screen_x0
y1 = screen_y - screen_y0
game_x = 8 / det * (  v_y * x1 - v_x * y1 )
game_y = 8 / det * ( -u_y * x1 + u_x * y1 )

然后你可以简单地测试 game_x >= 0, game_x = 0, game_y

请参阅Isometric graphics in video games and pixel art 了解更有效的方法。

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 2013-01-06
    • 2018-09-25
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多