rpgmaker吧 关注:13,446贴子:23,980
  • 11回复贴,共1

rpg maker 中用脚本来获取事件的坐标位置是不是错误的

只看楼主收藏回复

在projertj1---------[原创发布] 写给萌新的超简单事件脚本指南 -------的帖子中
有关于玩家的坐标和地图事件坐标的代码
这两个是玩家的坐标
$gamePlayer.x
$gamePlayer.y
第n号地图事件的坐标
(这里把n改为了this)
$gameMap.events()[this].x
$gameMap.events()[this].y
然后,我把进行以下操作,测试后是OK的

//这两个是玩家的坐标
$gamePlayer.x
$gamePlayer.y
接着,我再进行以下操作,

//第n号地图事件的坐标
//(这里把n改为了this)
$gameMap.events()[this].x
$gameMap.events()[this].y
测试后,就报错了

TypeError
Cannot read property 'x' of undefined
类型错误
无法读取未定义的属性“x”
这两个试验我不但在mz版本试过,在mv版本也试过。
结论就是,在脚本中,可以用代码来获取玩家的坐标,但是无法用代码来获取事件的坐标。
报错的关键就是读取不了x。
在这里报错之后,后面的y它自然也就不读了。
当然了,到底是无法用代码来获取事件的坐标呢?
还是这个代码是错误的呢?
我不知道。


IP属地:广东1楼2023-08-19 02:45回复
    不知道是不是因为rpg maker的版本迭代。
    三个半夜的我把
    //第n号地图事件的坐标
    //(这里把n改为了this)
    $gameMap.events()[this].x
    $gameMap.events()[this].y
    改成了
    //地图本事件的坐标位置
    $gameMap.events()[this._x]
    $gameMap.events()[this._y]
    这样就不会报错了。
    -------------------------------------------------------------------------------------------------------
    同时,就是在projertj1找到的
    $gameMap.regionId(x,y)
    来得到地图事件的区域ID
    也是报错
    ReferenceError
    x is not defined
    引用错误
    未定义 x
    但是用$gamePlayer.regionId()
    来得到玩家的区域ID
    就没有报错
    然后,我在rmmz_objects.js找到
    Game_CharacterBase.prototype.regionId = function() {
    return $gameMap.regionId(this._x, this._y);
    };
    之后,才隐约觉得应该是格式出错了
    在把
    $gameMap.regionId(this._x, this._y)
    拿去测试后就发现不报错了。
    $gameMap.regionId(this._x, this._y)就应该是得到地图事件的区域ID 了吧。
    一楼的报错,也是在这里看到格式问题之后,才改好的。
    所以就是rpg maker经过了各个新版本的推出,
    ruby变成JavaScript的编程语言改变,
    在各个新版本又有时不时的升级情况下。
    有些脚本已经发生了格式不兼容了。


    IP属地:广东2楼2023-08-19 04:31
    收起回复
      之前因为$gameMap.regionId(x,y)这个代码报错,
      还在想着用$gameMap.regionId(x,y)这个格式,搞到了下面这种长代码来求地图事件的区域ID
      const eventRegionId = $gameMap.regionId($gameMap.event(this._eventId).x, $gameMap.event(this._eventId).y); $gameVariables.setValue(18, eventRegionId);
      结果发现还是报错,总之就是太费时了。
      $gameMap.regionId(this._x, this._y)
      这样短短的一句就搞定了。


      IP属地:广东3楼2023-08-19 04:44
      收起回复
        现在发现$gameMap.regionId(this._x, this._y)是没有报错了,
        但是似乎得不到区域ID的数据。
        所以,猜测
        $gameMap.events()[this._x]
        $gameMap.events()[this._y]
        也是没有报错,但是似乎得不到事件坐标的数据。
        所以,还是老老实实的在事件指令那里直接用封装好的指令好了。比如:
        ◆变量操作:#0001 = 本事件 的 地图横轴
        ◆变量操作:#0002 = 本事件 的 地图纵轴
        至于得到本事件区域ID的话,比如下面的一个组合就好了。
        ◆变量操作:#0003 = 本事件 的 地图横轴
        ◆变量操作:#0004 = 本事件 的 地图纵轴
        ◆获取指定位置的信息:0005变量, 区域编码, (0003变量,0004变量)


        IP属地:广东4楼2023-08-20 00:11
        回复