关于GMS2的Joint的若干问题求助 已解决
bbdanss121 发表于 2020-05-19 04:29:23 296

我在room中创建了一个控制object“obj_Control”,并建立了一个Create事件,代码如下

var instA = instance_create_layer(200, 150, "Instances", obj_Floor);

var instB = instance_create_layer(50, 200, "Instances", obj_Circle);

r = sqrt(power(instA.x-instB.x,2)+power(instA.y-instB.y,2));

var jointA = physics_joint_rope_create(instA, instB, instA.x, instA.y, instB.x, instB.y, r, true);

即在room中创建了实例A和实例B并通过Joint将两者连接在一起,这一步运作是正常的,运行后实例A和B被创建并被正确连接 之后我遇到两个问题

问题1:删除joint 如果我在Create时间结尾加入命令physics_joint_delete(joint)来删除Joint,即下方

var instA = instance_create_layer(200, 150, "Instances", obj_Floor);

var instB = instance_create_layer(50, 200, "Instances", obj_Circle);

r = sqrt(power(instA.x-instB.x,2)+power(instA.y-instB.y,2));

var jointA = physics_joint_rope_create(instA, instB, instA.x, instA.y, instB.x, instB.y, r, true);

physics_joint_delete(jointA);

房间在创建的同时joint会被删除,实例A、B不会相互连接

但如果我给obj_Control添加“按下P键事件”,并输入代码

physics_joint_delete(jointA);

在运行后会提示无法读取jointA的变量因此发生错误,我也无法实现“按下P后删除Joint”的目的


___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Key Press Event for P-key Key
for object obj_Control:

Variable obj_Control.jointA(100009, -2147483648) not set before reading it.
 at gml_Object_obj_Control_KeyPress_80 (line 8) - physics_joint_delete(jointA);
############################################################################################
--------------------------------------------------------------------------------------------
stack frame is
gml_Object_obj_Control_KeyPress_80 (line 8)

想要知道出现这种问题的原因是什么,我想要实现“按下P后删除Joint”的目标应该怎么做?

问题2 修改joint参数 与问题1类似,我无法通过在按下按键P事件中添加代码来操纵joint,而如果我在obj_Control的Create代码末尾增使用physics_joint_set_value函数修改joint参数的代码,比如修改Rope joint的最长长度,代码如下:

var instA = instance_create_layer(200, 150, "Instances", obj_Floor);

var instB = instance_create_layer(50, 200, "Instances", obj_Circle);

r = sqrt(power(instA.x-instB.x,2)+power(instA.y-instB.y,2));

var jointA = physics_joint_rope_create(instA, instB, instA.x, instA.y, instB.x, instB.y, r, true);

physics_joint_set_value(jointA, phy_joint_max_length, r+10);

在运行后会发现实例A和实例B没有成功被连接,删除physics_joint_set_value函数后一切正常,想要知道这是什么原因?

已在贴吧获得解答

最后于 13天前 被bbdanss121编辑 ,原因:
最新回复 (3)
  • zds1 发表于 2020-05-24 09:21:15
    0 2
    再发一次吧,我觉得这帖凉了
  • POSI2 发表于 2020-05-26 01:16:24
    0 3
    zds1 再发一次吧,我觉得这帖凉了
    不用担心,LZ在别处得到答案了
  • 天使的糖豆 发表于 2020-05-27 11:00:56
    0 4
    贴吧答复,var不是用来声明“变量”的,而是用来声明“临时变量”的。题主的写法实际执行时应该记录的那些关键ID都记在了临时变量导致后期无法使用。
    话说为啥这边一直是“未解决”