游戏制作者使用地图中的变量
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_
函数,但是,这些函数仅在 x
和 y
偏移量相同时起作用。它们似乎也不能很好地处理地图值。
是的,因为它们应该是相同的(阅读有关极坐标系的信息)。 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)
【讨论】:
以上是关于游戏制作者使用地图中的变量的主要内容,如果未能解决你的问题,请参考以下文章