设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1751|回复: 4
打印 上一主题 下一主题

[有事请教] 怎么让事件能够八分向移动,但人物不要开启八方向移动

[复制链接]

Lv2.观梦者

梦石
0
星屑
338
在线时间
169 小时
注册时间
2022-7-14
帖子
108
跳转到指定楼层
1
发表于 2022-11-9 17:15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
20星屑
我现在用得插件是triacontane的halfmove

我不想要玩家能够歪斜着走,因为我的地图不够开朗,并且每个方面都有大量的在干扰玩家的东西

我尝试如果歪斜,玩起来会很困扰,也不符合预期

但我想要虫子们们可以自由得移动,因为它们都在横着走会很怪异,虽然它们本身就有点奇怪,

它们是很小的某种虫子,并且有很多只,

如果都在横着走,那种场面就太奇怪了,这种行走的怪异不是我想要的风格,

我不太想要看见这样

我该怎么办!我想能够让游戏人物行动保持常规那样,并且拥有可以灵活移动的虫子,

请帮帮我,谢谢

最佳答案

查看完整内容

前两天试着玩了一下VisuStella的范例项目,我目前感觉所谓八方向插件的核心功能有三点: 1. 玩家控制的主角八方向行走,比如说同时按下两个垂直的方向键会斜着走(rmva作品king exit就是这样),或者按下小键盘1379会斜着走。 2. 人物(主要是主角)静止时的【逻辑朝向】也有8种而不是4种,体现在可以用确定键触发斜向的事件(x和y都相差1),甚至隔着斜向的柜台触发事件(x和y都相差2)。 3. 行走图也有8个方向而不是4个,从而使 ...

Lv4.逐梦者

梦石
0
星屑
5599
在线时间
409 小时
注册时间
2021-12-4
帖子
443
2
发表于 2022-11-9 17:15:21 | 只看该作者
前两天试着玩了一下VisuStella的范例项目,我目前感觉所谓八方向插件的核心功能有三点:
1. 玩家控制的主角八方向行走,比如说同时按下两个垂直的方向键会斜着走(rmva作品king exit就是这样),或者按下小键盘1379会斜着走。
2. 人物(主要是主角)静止时的【逻辑朝向】也有8种而不是4种,体现在可以用确定键触发斜向的事件(x和y都相差1),甚至隔着斜向的柜台触发事件(x和y都相差2)。
3. 行走图也有8个方向而不是4个,从而使得静止时的8个朝向能直接看出来(否则比如说你看到主角是朝右的,但逻辑上它可能朝着右上或右下)。

而rm自带的斜向移动则只能用于【设置移动路线】指令,并且静止时朝向以及行走图依然只有4个方向。
我对楼主的建议是,如果只想要事件的【八方向移动】而不需要【八方向行走图】或者它们在静止时的【8个逻辑朝向】,那么应该放弃相关插件……
那好,问题就变成了,如何让事件的随机移动以及靠近/远离主角【包含斜向】而不是【只有横竖】。
rpg.objects.js的第7800行左右有这样几个函数:
Game_Character.prototype.moveRandom = function() {
    const d = 2 + Math.randomInt(4) * 2;
    if (this.canPass(this.x, this.y, d)) {
        this.moveStraight(d);
    }
};

Game_Character.prototype.moveTowardCharacter = function(character) {
    const sx = this.deltaXFrom(character.x);
    const sy = this.deltaYFrom(character.y);
    if (Math.abs(sx) > Math.abs(sy)) {
        this.moveStraight(sx > 0 ? 4 : 6);
        if (!this.isMovementSucceeded() && sy !== 0) {
            this.moveStraight(sy > 0 ? 8 : 2);
        }
    } else if (sy !== 0) {
        this.moveStraight(sy > 0 ? 8 : 2);
        if (!this.isMovementSucceeded() && sx !== 0) {
            this.moveStraight(sx > 0 ? 4 : 6);
        }
    }
};

Game_Character.prototype.moveAwayFromCharacter = function(character) {
    const sx = this.deltaXFrom(character.x);
    const sy = this.deltaYFrom(character.y);
    if (Math.abs(sx) > Math.abs(sy)) {
        this.moveStraight(sx > 0 ? 6 : 4);
        if (!this.isMovementSucceeded() && sy !== 0) {
            this.moveStraight(sy > 0 ? 2 : 8);
        }
    } else if (sy !== 0) {
        this.moveStraight(sy > 0 ? 2 : 8);
        if (!this.isMovementSucceeded() && sx !== 0) {
            this.moveStraight(sx > 0 ? 6 : 4);
        }
    }
};
可以看到其中具体调用的都是横竖移动(moveStraight),横竖移动的参数可以填 2 4 6 8 这四个数字表示【下 左 右 上】。
那么我们只要修改这几个函数的逻辑,使得某些情况下调用的是斜向移动(moveDiagonally)即可,斜向移动要填两个参数,第一个是4或6,第二个是2或8。
举个例子:当前某个怪物在主角的(x+4,y+10)位置,如果让它一直向主角移动,那么rm默认的行为很可能是【先向上6步,然后左上左上左上左上锯齿形靠近玩家】。
而如果对上述函数的逻辑修改足够恰当,就能做出【先向左上斜走4步,然后再直线向上6步撞到主角】的效果,也更符合现实。
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7136
在线时间
1364 小时
注册时间
2018-12-16
帖子
1948
3
发表于 2022-11-9 19:08:08 | 只看该作者
这个须求很特别....
因为我挂上8方向插件之后...一般都会
01.主角8方向.事件4方向
02.主角8方向.事件8方向
但是我不知道如何可以.
03.主角4方向.事件8方向....

评分

参与人数 1+1 收起 理由
蜜橘团子 + 1 塞糖

查看全部评分

回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
338
在线时间
169 小时
注册时间
2022-7-14
帖子
108
4
 楼主| 发表于 2022-11-9 20:29:42 | 只看该作者
play337 发表于 2022-11-9 19:08
这个须求很特别....
因为我挂上8方向插件之后...一般都会
01.主角8方向.事件4方向

哈哈可爱
回复

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22037
在线时间
8575 小时
注册时间
2011-12-31
帖子
3362
5
发表于 2022-12-9 17:54:54 | 只看该作者
你用像素移動,PixiMovr找就找郅

评分

参与人数 1+1 收起 理由
蜜橘团子 + 1

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-17 08:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表