游戏制作者使用地图中的变量

Posted

技术标签:

【中文标题】游戏制作者使用地图中的变量【英文标题】:Gamemaker using variables from maps 【发布时间】:2018-03-16 19:15:30 【问题描述】:

我有一个拥有自己库存的对象,为此我使用了一张地图列表。 每个项目都有一个名称和 x 和 y 偏移量。

我想将每个项目的偏移量绘制在我的另一个对象之上,并让它们与原始对象一起转动,所以在绘图函数中我有这个:

draw_sprite_ext(spr_cart2, 0, x, y,1,1,direction, c_white, 1)
for(i = 0; i < ds_list_size(products); i++)
    product = products[| i]
    rad_dir = degtorad(direction)
    x_rot = cos(rad_dir)*(product[? "x"]-x) - sin(rad_dir)*(product[? "y"]-y)
    y_rot = cos(rad_dir)*(product[? "y"]-y) - sin(rad_dir)*(product[? "x"]-x)
    draw_sprite_ext(asset_get_index("spr_"+product[? "product"]), 0, x_rot, y_rot, 1, 1, direction, c_white, 1)

但是,它根本不起作用。 我尝试记录产品[? "x"]-x,它给出了一个非常大的负数,而只记录 product[? "x"] 确实给出了预期的结果。

【问题讨论】:

总是看到sin+cos 我觉得有人不知道lengthdir_...的功能。 不知道 lengthdir_ 函数,但是,这些函数仅在 xy 偏移量相同时起作用。它们似乎也不能很好地处理地图值。 是的,因为它们应该是相同的(阅读有关极坐标系的信息)。 map - 与任何其他变量/等没有区别。 【参考方案1】:

最终起作用的不是直接从地图中减去 旋转逻辑也存在一些错误。 工作代码:

draw_sprite_ext(spr_cart2, 0, x, y,1,1,direction, c_white, 1)
for(i = 0; i < ds_list_size(products); i++)
    product = products[| i]
    x_rot = (cos(rad_dir)*(product[? "x"])) - (sin(rad_dir)*(product[? "y"]))
    y_rot = (cos(rad_dir)*(product[? "y"])) + (sin(rad_dir)*(product[? "x"]))
    draw_sprite_ext(asset_get_index("spr_"+product[? "product"]), 0, x-x_rot, y+y_rot, 0.5, 0.5, direction, c_white, 1)

【讨论】:

以上是关于游戏制作者使用地图中的变量的主要内容,如果未能解决你的问题,请参考以下文章

unity如何制作恶魔城小地图

怎样可以制作一款游戏

用C#制作推箱子小游戏

超级干huo用c语言制作游戏地图可自定义

谷歌地图吃豆人[关闭]

Discord.js 在电子游戏的地图列表中计算 2 支球队的胜率