查看: 16780|回复: 32

[有事请教] 如何无缝替换行走图

[复制链接]
梦石
0
星屑
9064
在线时间
1933 小时
注册时间
2016-6-19
回帖
329
发表于 2018-11-11 21:47:10 | 显示全部楼层 |阅读模式

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

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

×
MV默认更改行走图时会重置行走图的pattern,有什么脚本或者方案能够使新行走图延续当前行走图的pattern数值吗?
想做人物在行走中的眨眼效果。
梦石
0
星屑
9064
在线时间
1933 小时
注册时间
2016-6-19
回帖
329
 楼主| 发表于 2018-11-12 00:06:07 | 显示全部楼层
无论更改图片index还是更换新图片,都会导致角色的pattern值刷新
回复

使用道具 举报

梦石
0
星屑
16261
在线时间
4014 小时
注册时间
2015-9-14
回帖
1322

开拓者

发表于 2018-11-12 01:10:13 | 显示全部楼层
用圖片替換,感覺如何.
XX 0.png
眼.gif
https://rpg.blue/data/attachment/album/202003/28/021323lltgrsvfytfwuya5.gif
回复

使用道具 举报

梦石
0
星屑
9064
在线时间
1933 小时
注册时间
2016-6-19
回帖
329
 楼主| 发表于 2018-11-12 01:19:36 | 显示全部楼层
wabcmcc 发表于 2018-11-12 01:10
用圖片替換,感覺如何.

谢答,不过你给的这个范例里,人物行走动画和闭眼动画也是不能共存的?
我给玩家角色做了两套行走图,一套睁眼的一套闭眼的,想利用并行事件,在任何时候随机将角色睁眼的行走图替换成闭眼的,以创造出眨眼的效果。
然而没用,换上新图片会重置pattern

点评

角色想眨眼,动画就会自动回归到站立的状态  发表于 2018-11-12 01:22
以及在同一张图片里更改index同样会重置pattern  发表于 2018-11-12 01:21
回复

使用道具 举报

梦石
0
星屑
16261
在线时间
4014 小时
注册时间
2015-9-14
回帖
1322

开拓者

发表于 2018-11-12 02:33:59 | 显示全部楼层
本帖最后由 wabcmcc 于 2018-11-12 02:37 编辑

用"多幀行走"腳本加改版行走圖.

$Actor [6 6 6 6].png

[fold=More Character Frames.js]//=============================================================================
// More Character Frames
// by Shaz
// Last Updated: 2015.09.21
//=============================================================================

/*:
* @plugindesc 允許超過3幀(踏步圖)
Allows more than 3 Frames
* @author Shaz
*
* @help This plugin does not provide plugin commands.
* //此插件不提供插件命令。
*
* Add [D L R U] to your character sheet name (with $ prefix) to specify haw
* many frames in each direction (Down, Left, Right, Up).
* Spritesheets with this added to the file name will use a looping frame
* animation rather than the back-and-forth default animation.
*
* //將[D L R U]添加到您的角色表名稱(帶有$前綴)
*   每個方向上的多個幀(向下,向左,向右,向上)。
*   添加到文件名的字符表將從左到右重複循環,
*   而不是使用來回的默認模式。
*
* The first frame should be the idle/still pose.
* //第一幀應該是空閒/靜止姿勢。
*
* eg. $Ralph [8 8 8 8].png
*     is a character sheet consisting of 4 rows with 8 frames per row.
*     Animation will go from frame 1 to 8 then start at 1 again.
* //例如。 $ Ralph [8 8 8 8] .png
*           是一個由4行組成的字符表,每行8幀。
*            動畫將從第1幀到第8幀再從1開始。
*   又例如: $ Ralph [6 6 6 6] .png
*          是一個由4行組成的字符表,每行6幀。
*           動畫將從第1幀到第6幀再從1開始。
*/

(function() {

  ImageManager.isMultiFrameCharacter = function(filename) {
    var frames = filename.match(/\[(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\]/);
    return frames && frames.length === 5;
  };

  ImageManager.getCharacterFrameCount = function(filename) {
    var frames = filename.match(/\[(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\]/);
    if (!frames) {
      return [3, 3, 3, 3];
    } else {
      return frames.splice(1, 4);
    }
  };

  var _Game_CharacterBase_initMembers = Game_CharacterBase.prototype.initMembers;
  Game_CharacterBase.initMembers = function() {
    _Game_CharacterBase_initMembers.call(this);
    this._isMultiFrame = false;
    this._frames = [3, 3, 3, 3];
  };

  var _Game_CharacterBase_maxPattern = Game_CharacterBase.prototype.maxPattern;
  Game_CharacterBase.prototype.maxPattern = function() {
    if (!this._isMultiFrame) {
      return _Game_CharacterBase_maxPattern.call(this);
    } else {
      return this._frames[(this._direction / 2) - 1];
    }
  };

  var _Game_CharacterBase_pattern = Game_CharacterBase.prototype.pattern;
  Game_CharacterBase.prototype.pattern = function() {
    if (!this._isMultiFrame) {
      return _Game_CharacterBase_pattern.call(this);
    } else {
      return this._pattern < this._frames[this._direction / 2 - 1] ? this._pattern : 0;
    }
  };

  var _Game_CharacterBase_isOriginalPattern = Game_CharacterBase.prototype.isOriginalPattern;
  Game_CharacterBase.prototype.isOriginalPattern = function() {
    if (!this._isMultiFrame) {
      return _Game_CharacterBase_isOriginalPattern.call(this);
    } else {
      return this.pattern() === 0;
    }
  };

  var _Game_CharacterBase_resetPattern = Game_CharacterBase.prototype.resetPattern;
  Game_CharacterBase.prototype.resetPattern = function() {
    if (!this._isMultiFrame) {
      _Game_CharacterBase_resetPattern.call(this);
    } else {
      this.setPattern(0);
    }
  };

  var _Game_CharacterBase_setImage = Game_CharacterBase.prototype.setImage;
  Game_CharacterBase.prototype.setImage = function(characterName, characterIndex) {
    _Game_CharacterBase_setImage.call(this, characterName, characterIndex);
    this._isMultiFrame = ImageManager.isMultiFrameCharacter(characterName);
    this._frames = ImageManager.getCharacterFrameCount(characterName);
  };

  var _Game_CharacterBase_setTileImage = Game_CharacterBase.prototype.setTileImage;
  Game_CharacterBase.prototype.setTileImage = function(tileId) {
    _Game_CharacterBase_setTileImage.call(this, tileId);
    this._isMultiFrame = false;
    this._frames = [3, 3, 3, 3];
  };

  Game_CharacterBase.prototype.isMultiFrame = function() {
    return this._isMultiFrame;
  };

  Game_CharacterBase.prototype.getDirectionFrames = function() {
    return this._frames[this._direction / 2 - 1];
  };

  var _Game_Event_initMembers = Game_Event.prototype.initMembers;
  Game_Event.prototype.initMembers = function() {
    _Game_Event_initMembers.call(this);
    if (this._isMultiFrame) {
      this._originalPattern = 0;
    }
  };

  var _Sprite_Character_patternWidth = Sprite_Character.prototype.patternWidth;
  Sprite_Character.prototype.patternWidth = function() {
    if (!this._character.isMultiFrame()) {
      return _Sprite_Character_patternWidth.call(this);
    } else {
      return this.bitmap.width / this._character.getDirectionFrames();
    }
  };

})();[/fold]

https://rpg.blue/data/attachment/album/202003/28/021323lltgrsvfytfwuya5.gif
回复

使用道具 举报

梦石
0
星屑
9064
在线时间
1933 小时
注册时间
2016-6-19
回帖
329
 楼主| 发表于 2018-11-12 11:42:52 | 显示全部楼层
wabcmcc 发表于 2018-11-12 02:33
用"多幀行走"腳本加改版行走圖.

有劳了~不过我目前用的就是4行8帧的行走图,以及,为了更强的表现力,我想让眨眼帧的出现随机化,而不是固定出现在行走图的某一帧。现在还在努力研究。
回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2018-11-12 12:37:15 | 显示全部楼层
似乎不会改变pattern
pattern的改变可能不是这个原因。

Game_CharacterBase.prototype.setImage = function(characterName, characterIndex) {
    this._tileId = 0;
    this._characterName = characterName;
        this._yuan_characterName = this._yuan_characterName || characterName
    this._characterIndex = characterIndex;
    this._isObjectCharacter = ImageManager.isObjectCharacter(characterName);
};

回复

使用道具 举报

梦石
0
星屑
9064
在线时间
1933 小时
注册时间
2016-6-19
回帖
329
 楼主| 发表于 2018-11-12 13:12:05 | 显示全部楼层
yang1zhi 发表于 2018-11-12 12:37
似乎不会改变pattern
pattern的改变可能不是这个原因。

会不会是这里,总是刷新pattern的值为1
Game_CharacterBase.prototype.updateAnimation = function() {
    this.updateAnimationCount();
    if (this._animationCount >= this.animationWait()) {
        this.updatePattern();
        this._animationCount = 0;
    }
};

以及this._yuan_characterName = this._yuan_characterName || characterName是什么...
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2018-11-12 13:12:06 | 显示全部楼层
本帖最后由 soulsaga 于 2018-11-12 13:22 编辑

pattern是什么..

都是走完一格才会换图的..你想不站立都难..
你需要的是待机行走图动画

点评

但是事件换行走图是在走完1格时才会换的..走完自然就变回站立了..除非找到刷新行走图的脚本..  发表于 2018-11-12 13:26
纵向帧的值是direction,就是角色的朝向.pattern和direction包括在一个index中,index即3*4的一个完整角色  发表于 2018-11-12 13:23
是行走图的单帧画面的值,MV行走图是3帧的,pattern值分别为0,1,2,就是横向的3个,站立不动时的pattern=1  发表于 2018-11-12 13:21
回复

使用道具 举报

梦石
0
星屑
9064
在线时间
1933 小时
注册时间
2016-6-19
回帖
329
 楼主| 发表于 2018-11-12 13:28:43 | 显示全部楼层
本帖最后由 康姆图帕帕 于 2018-11-12 13:31 编辑
soulsaga 发表于 2018-11-12 13:12
pattern是什么..

都是走完一格才会换图的..你想不站立都难..


这样么...
那我可能要全角色图片化表示了


以及待机行走图动画已经用着呢,不过是表示人物的呼吸动作的。
要是纸娃娃图像可拆分执行就好了
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部