查看: 4681|回复: 4

[原创发布] 横版战斗中按纵向格子依次排序敌群。

[复制链接]
梦石
0
星屑
60
在线时间
306 小时
注册时间
2014-8-5
回帖
403
发表于 2016-1-11 16:19:41 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 夏末渐离 于 2016-1-11 16:37 编辑

[pre lang="javascript" file="XMJL_SortEnemyGrid.js"]
/*:
* 原理:
* 把敌人当成格子,根据纵向绘制横向。
* 缺点:
* 1.每个敌人都需要添加注释,否则这个敌人会失踪……
* 例如:<EnemyGrid:1>
* 2.在敌群添加敌人时必须恰好填满每列最大格子数。
* 例如:一列规定为4个格子时,依次放一个占1个格子的敌人+一个占2个格子的敌人+一个占1个格子的敌人则视为填满这一列。
*       若依次放三个占1个格子的敌人+一个占2个格子的敌人则超出这列的最大格子数,会发生诡异的排列。
* @author XMJL
* @plugindesc  sort troop as grid.
*
* @param EnemyColGrid
* @default 4
*
* @param EnemyGridWidth
* @default 200
*
* @param EnemyGridHeight
* @default 150
*
* @param ScreenLeft
* @default 100
*
* @param ScreenTop
* @default 100
*/
(function()
{
    var param = PluginManager.parameters('XMJL_SortEnemyGrid');
    var EnemyColGrid=Number(param['EnemyColGrid']);
    var EnemyGridWidth=Number(param['EnemyGridWidth']);
    var EnemyGridHeight=Number(param['EnemyGridHeight']);
    var ScreenLeft=Number(param['ScreenLeft']);
    var ScreenTop=Number(param['ScreenTop']);
    var EnemyType;
    var FillFull;
    var _Game_Enemy_initMembers=Game_Enemy.prototype.initMembers;
    Game_Enemy.prototype.initMembers=function()
    {
        _Game_Enemy_initMembers.call(this);
        EnemyType=new Array();
        FillFull=0;
    }
    Game_Enemy.prototype.screenX = function()
    {
        if($gameSystem.isSideView())
        return ScreenLeft+FillFull*EnemyGridWidth;
        else
        return this._screenX;
    };

   Game_Enemy.prototype.screenY = function() {
          if($gameSystem.isSideView())
          {
              var index=this.index();
              var enemy=this.enemy();
              var type= Number(enemy.meta.EnemyGrid);
              var lockAnchor=type*EnemyGridHeight/2;
              var lastgrid=XMJL_caluEnemyGrid(index,type);
              if(lastgrid==0)
                  return ScreenTop+lockAnchor;
              else
                  return ScreenTop+lastgrid*EnemyGridHeight+lockAnchor;
          }
          else
          return this._screenY;
    };
    var XMJL_caluEnemyGrid=function(index,type)
    {
        var sum;
         if(index==0)
         {
             sum=0;
             EnemyType[index]=type;
             return 0;
         }
         else
         {
             sum=EnemyType[index-1]+type;
             if(sum>=EnemyColGrid)
             {
                 FillFull++;
                 EnemyType[index]=sum%EnemyColGrid;
             }
             else
             EnemyType[index]=sum;
             return EnemyType[index-1];
         }
    }
})();
[/pre]
[fold=说明]
原理.png
[/fold]
[fold=诡异的排列]
错误.png
[/fold]
绘制效果:
正常.jpg

评分

参与人数 1梦石 +1 收起 理由
余烬之中 + 1 0x0

查看全部评分

  点我进入    
       ↓      

笑问情缘

梦石
0
星屑
68
在线时间
238 小时
注册时间
2006-5-3
回帖
544
发表于 2016-1-11 16:24:33 来自手机 | 显示全部楼层
支持大大,多谢
回复

使用道具 举报

梦石
0
星屑
50
在线时间
44 小时
注册时间
2015-12-27
回帖
42
发表于 2016-1-11 16:46:49 | 显示全部楼层
//==============================================================================
// MrTS_BattleCharacterLimit.js
//==============================================================================

/*:
* @plugindesc Changes character placement for battles.
* @author Mr. Trivel
*
* @param Max Characters
* @desc 设置人物数量
* @default 4
*
* @param Characters Per Row
* @desc 设置人物数量
* @default 4
*
* @param Offset
* @desc Y坐标
* @default 120
*
* @param Vertical Offset
* @desc X坐标
* @default 360
*
* @param Lower Index
* @desc How further each character below is
* @default 48
*
* @param Forward Offset
* @desc Move the rows by an offset for each row in battle
* @default 100
*
* @param Row Spacing
* @desc Space between rows
* @default 100
*
* @param Vertical Chara Spacing
* @desc Space between rows
* @default 54
*
* @help Version 1.1
*/

(function() {
        var parameters = PluginManager.parameters('人物战斗队伍');

        var maxCharacters = Number(parameters['Max Characters'] || 5);
        var charasPerRow = Number(parameters['Characters Per Row'] || 3);
        var rightOffset = Number(parameters['Offset'] || 120);
        var topOffset = Number(parameters['Vertical Offset'] || 360);
        var lowerCharaIndex = Number(parameters['Lower Index'] || 48);
        var forwardIndex = Number(parameters['Forward Offset'] || 100);
        var rowSpacing = Number(parameters['Row Spacing'] || 100);
        var charaVerticalSpacing = Number(parameters['Vertical Chara Spacing'] || 54);

        Game_Party.prototype.maxBattleMembers = function() {
            return maxCharacters;
        };

        Sprite_Actor.prototype.setActorHome = function(index) {
                var c = Math.floor(index/charasPerRow);
                var x = (Graphics.boxWidth - rightOffset) - forwardIndex * Math.floor($gameParty.battleMembers().length/charasPerRow) + lowerCharaIndex * (index % charasPerRow) + rowSpacing * c;
                var y = topOffset + (index%charasPerRow) * charaVerticalSpacing;
            this.setHome(x, y);
        };

})();


太好了,一直就想要排列多排敌人的!谢谢楼主!

上面是排列我方参战人员和最大数的,楼主插件可以集成提高敌群敌人最大数量吗?

点评

好的,非常感谢!  发表于 2016-1-11 16:50
最近比较忙,等有空再看吧。  发表于 2016-1-11 16:48
回复

使用道具 举报

梦石
0
星屑
80
在线时间
386 小时
注册时间
2007-7-27
回帖
4075

开拓者

发表于 2016-1-11 21:13:22 | 显示全部楼层
应该加一点透视吧,你看主角方都有透视!

点评

明白了,这样可以弄得越来越有趣了。  发表于 2016-1-11 22:22
确切的说是梯形  发表于 2016-1-11 22:19
类似平行四边形的感觉?  发表于 2016-1-11 22:03
不是透明,是说不要按照矩形网格,而是根据近大远小形变的网格,类似于rm2k3的战场那种  发表于 2016-1-11 22:00
加透明的话,莫非是获取敌人精灵然后修改opacity ? 0x0  发表于 2016-1-11 21:56
吸吸
回复

使用道具 举报

梦石
0
星屑
140
在线时间
345 小时
注册时间
2009-5-15
回帖
77
发表于 2016-1-11 21:49:36 | 显示全部楼层
大大啊!求你把地图的插件移植到菜单先项里,就是地图不在游戏界面上,而是按下Esc,显示在菜单的某个窗口里。

点评

啊,你们的名字都好像,我记混了....  发表于 2016-1-11 22:47
你是指过眼云烟的小地图么?  发表于 2016-1-11 22:02
敌人自动排列系统    1/1
技能类型着色   1/1
物品着色     0/1
仿网游强化系统    0/1
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部