查看: 5842|回复: 7

[原创发布] 横版战斗时显示主角的状态图标窗口或精灵。

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

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

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

×
本帖最后由 夏末渐离 于 2016-1-6 15:22 编辑

[fold=以下为图标窗口]
[pre lang="javascript" file="Window_IconOnAnyPosition.js"]
/*:
* @author XMJL
* @plugindesc  this plugin name must be Window_IconOnAnyPosition.js
*
* @param Window_Width
* @default 300
*
* @param Window_Height
* @default 300
*
* @param Window_Visible
* @default 255
*
* @param Window_X
* @default 0
*
* @param Window_Y
* @default 0
*
* @param spaceX
* @desc IonsMoveX
* @default 10
*
* @param spaceY
* @desc IonsMoveY
* @default 50
*/
(function()
{
    var parameters = PluginManager.parameters('Window_IconOnAnyPosition');
    var myX=Number(parameters['Window_X']);
    var myY=Number(parameters['Window_Y']);
    var fixX=Number(parameters['spaceX']);
    var fixY=Number(parameters['spaceY']);
    var mywidth=Number(parameters['Window_Width']);
    var myheight=Number(parameters['Window_Height']);
    var myVisible=Number(parameters['Window_Visible']);
    var _Scene_Battle_createStatusWindow = Scene_Battle.prototype.createStatusWindow;
    Scene_Battle.prototype.createStatusWindow = function()
    {
        _Scene_Battle_createStatusWindow.call(this);
        if($gameSystem.isSideView())
        this.addChild(new Window_IconOnAnyPosition());
    }
    function Window_IconOnAnyPosition(){
        this.initialize.apply(this, arguments);
    }
    Window_IconOnAnyPosition.prototype = Object.create(Window_Selectable.prototype);
    Window_IconOnAnyPosition.prototype.constructor = Window_IconOnAnyPosition;
    Window_IconOnAnyPosition.prototype.initialize = function()
    {
        Window_Selectable.prototype.initialize.call(this, myX, myY, mywidth, myheight);
        this.opacity = myVisible;
        this.refresh();
    };

    Window_IconOnAnyPosition.prototype.drawItem=function(index,x,y)
    {
        var actor=$gameParty.battleMembers()[index];
        this.drawActorIcons(actor,x,y);
    };
    Window_IconOnAnyPosition.prototype.drawAllItems=function()
    {
        var ox,oy,i;
        for(i=0;i<$gameParty.battleMembers().length;i++)
        {
            if(i==0){ ox=0;oy=0;this.drawItem(i,ox,oy);}
            else
            {
                ox=ox+fixX;
                oy=oy+fixY;
                this.drawItem(i,ox,oy);
            }
        }
    };
    Window_IconOnAnyPosition.prototype.refresh=function()
    {
        this.contents.clear();
        this.drawAllItems();
    };

    Window_IconOnAnyPosition.prototype.update=function()
    {
        this.refresh();
    };
})();
[/pre]
[/fold]
1.jpg

[fold=以下为图标精灵]
[pre lang="javascript"]
/*:
* @author XMJL
* 横版战斗时在主角头顶上显示状态图标
*/
(function()
{
    var _Sprite_Actor_initMembers=Sprite_Actor.prototype.initMembers;
    Sprite_Actor.prototype.initMembers=function()
    {
        _Sprite_Actor_initMembers.call(this);
        this.createStateIconSprite();
    }
    Sprite_Actor.prototype.createStateIconSprite=function()
    {
        this._stateIconSprite = new Sprite_StateIcon();
        this.addChild(this._stateIconSprite);
    }
    Sprite_Actor.prototype.setBattler = function(battler) {
        Sprite_Battler.prototype.setBattler.call(this, battler);
        var changed = (battler !== this._actor);
        if (changed) {
            this._actor = battler;
            if (battler) {
                this.setActorHome(battler.index());
            }
            this.startEntryMotion();
            this._stateSprite.setup(battler);
            if($gameSystem.isSideView())
            this._stateIconSprite.setup(battler);
        }
    };
    var _Sprite_Actor_update=Sprite_Actor.prototype.update;
    Sprite_Actor.prototype.update=function()
    {
        _Sprite_Actor_update.call(this);
        if($gameSystem.isSideView())
        this.updateIconStateSprite();
    }
    Sprite_Actor.prototype.updateIconStateSprite = function()
    {
        var bitmap = this._mainSprite.bitmap;
        if(bitmap)
        {
            this._stateIconSprite.y = -Math.round((bitmap.height/6 + 40) * 0.9);
        }
    };
})();
[/pre]
[/fold]
2.png



评分

参与人数 1梦石 +1 收起 理由
余烬之中 + 1 原创发布

查看全部评分

  点我进入    
       ↓      
梦石
0
星屑
60
在线时间
306 小时
注册时间
2014-8-5
回帖
403
 楼主| 发表于 2016-1-6 15:26:33 | 显示全部楼层
@309988769 你定制的窗口。
@king 原帖已被整合,请重新收藏。

点评

我想我明白精灵是什么意思了,是我想得简单了,要是把绘制精灵改成显示名字的话呢,需要改动多吗  发表于 2016-1-6 22:42
我想我明白精灵是什么意思了,是我想得简单了,要是把绘制精灵改成显示名字的话呢,需要改动多吗  发表于 2016-1-6 22:41

评分

参与人数 2星屑 +46 收起 理由
309988769 + 10 我很赞同
king + 36 精品 O(∩_∩)O谢谢

查看全部评分

  点我进入    
       ↓      
回复

使用道具 举报

梦石
0
星屑
1225
在线时间
564 小时
注册时间
2014-11-30
回帖
126
发表于 2016-1-6 21:16:56 | 显示全部楼层
夏末渐离 发表于 2016-1-6 15:26
@309988769 你定制的窗口。
@king 原帖已被整合,请重新收藏。

非常感谢,你为我重新做了一个,是我自己没有表达清楚,其实我也是要显示精灵,只是显示方式为一排,不是在一个点一直变化显示不同的图标,我不理解代码,不知道是不是只要改一句显示方式代码就可以了,还是更麻烦的修改,如果只是改一句,麻烦你告诉我修改那里,如果很复查的话,就算了,谢谢了

点评

在drawItem方法里面第60行后加上this.drawActorName(actor,x,y); 位置由你自己调了。  发表于 2016-1-6 22:53
我想我明白精灵是什么意思了,是我想得简单了,要是把绘制精灵改成显示名字的话呢,需要改动多吗  发表于 2016-1-6 22:40
精灵只有一个,不停绘制不同的图标,没必要弄多个精灵绘制多个图标。用窗口自带方法来绘制一排节约我的时间。  发表于 2016-1-6 22:22
回复

使用道具 举报

梦石
0
星屑
342
在线时间
101 小时
注册时间
2013-9-10
回帖
35
发表于 2016-1-7 08:10:03 | 显示全部楼层
309988769 发表于 2016-1-6 21:16
非常感谢,你为我重新做了一个,是我自己没有表达清楚,其实我也是要显示精灵,只是显示方式为一排,不是 ...

请问你在之前发的帖子里面怎么把血条放在人物边上,隐藏下方状态栏的呢,之前的帖子找不着了

点评

可惜我不会脚本,隐藏状态栏对我来说是很难的问题  发表于 2016-1-7 21:54
血条放人物边上,YEP插件就有,而我也没有隐藏下方的状态栏,可能是我没截完图,引起错觉,其实你问懂JS的人,很容易就可以隐藏状态栏,  发表于 2016-1-7 21:53
回复

使用道具 举报

梦石
0
星屑
75
在线时间
231 小时
注册时间
2014-10-5
回帖
226
发表于 2016-1-24 18:30:26 | 显示全部楼层
私聊你不在,大神,你这个插件很强大,不过我的游戏需要更细致的一个效果,你这个插件是循环显示一个图标,怎么样才能不是循环,而是同时显示很多状态,而且,不是显示一个图标,是显示一个有透明度的图片,可以设置大小坐标,更或者,是显示多个动画,同时显示,不过显示动画的话,需要放慢播放的速度,要不多了会卡,在线等你

点评

我晕,就差这一个问题了,帮帮我  发表于 2016-1-26 16:55
最近回老家断网了呢。  发表于 2016-1-26 15:56
大神,状态动画找到扩展的方法了,你能不能有空帮我看看,修改哪里,才能让所有状态动画同时显示,不要像现在,只显示一个  发表于 2016-1-26 13:17
关于图标不随角色移动,这点倒是我疏漏了,有时间我想办法改改  发表于 2016-1-26 07:17
既然规格一样,为什么不用ps扩展自带的icon图片呢?然后再在状态那里选择扩展出来的图标  发表于 2016-1-26 07:14
回复

使用道具 举报

梦石
0
星屑
60
在线时间
306 小时
注册时间
2014-8-5
回帖
403
 楼主| 发表于 2016-1-26 19:19:23 | 显示全部楼层
RM无节操小分队 发表于 2016-1-24 18:30
私聊你不在,大神,你这个插件很强大,不过我的游戏需要更细致的一个效果,你这个插件是循环显示一个图标, ...

我研究了一下午,还是放弃了。
至于为什么,我不会改,毕竟我也只是刚入门的新手。

最后我来跟你解释下显示图标精灵的工作原理吧:

1.系统先加载一张icon图片,按图片宽度把每个图标分成了一个所有图标序号数组,就像下图那样。
1.png

2.假设当主角受到BUFF序号为:1.中毒 7.睡眠 :

3.那么这个角色的所有图标序号数组就会先把序号为1.中毒的状态交给图标精灵的overlayIndex对象,

4.图标精灵根据overlayIndex的值,找到这个中毒状态的图标在这张图片所处的位置(宽高),最后使用setFrame方法把中毒显示出来。

5.紧接着第三步, 图标序号数组又会把序号为7.中毒的状态按第4步又处理了一遍把睡眠显示出来。从而造成了后来的图标覆盖前面图标的假象。

结语:
让我们看到上面那张图来做最后的一个解释:

你要让我从固定的图标序号:如123456789。分别切割出1和7,再显示出来,这样的工作我觉得只有PS才能完成。

因为精灵始终只有一个,那么setFrame也只有一个,你如果一定要单独显示1和7的话,那么必定会按这样的顺序显示出来:1234567  而且其中23456是显示错误的。
  点我进入    
       ↓      
回复

使用道具 举报

梦石
2
星屑
1239
在线时间
355 小时
注册时间
2014-9-27
回帖
98
发表于 2016-1-26 20:01:41 | 显示全部楼层
夏末渐离 发表于 2016-1-26 19:19
我研究了一下午,还是放弃了。
至于为什么,我不会改,毕竟我也只是刚入门的新手。

那把每个状态图标用分开来成为若干个图标文件应该可以吧。
回复

使用道具 举报

梦石
0
星屑
61
在线时间
696 小时
注册时间
2011-1-4
回帖
176
发表于 2016-2-28 16:30:34 | 显示全部楼层
本帖最后由 cjlzbb 于 2016-2-28 23:50 编辑

楼主强大,有两个问题想问下

第一个是怎样修改脚本才能做到不画第X号的状态,就是当它不存在

3.那么这个角色的所有图标序号数组就会先把序号为1.中毒的状态交给图标精灵的overlayIndex对象,

就是你之前说的这步
如果序号为X就不画

第二个是我试了下4V4的场景下,对敌我双方分别使用全体中毒的技能,结果楼主果然强大
我方的4个状态唰的就加上了
敌方的4个状态在默认脚本的效率下咔咔咔咔地加。。。看着都纠结,楼主可以顺便把敌人状态的显示速度改成跟我方的一样吗
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部