赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 0 |
最后登录 | 2019-10-13 |
在线时间 | 19 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 113
- 在线时间
- 19 小时
- 注册时间
- 2018-12-18
- 帖子
- 12
|
2楼
楼主 |
发表于 2019-1-10 13:37:31
|
只看该作者
把正在使用的脚本附上,有没有可能有大佬改一下脚本,让使用默认的显示图片去读取第一张图片这个方式,改成加一段代码,用脚本命令去读取,可以把不同目标放在不同文件夹中读取
//=============================================================================
// PictureAnimation.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.5.2 2018/03/04 縦及び横でアニメーションピクチャを表示した後、同じ番号でピクチャの表示をすると正常に表示されない場合がある不具合を修正
// 1.5.1 2017/08/22 アニメーション再生中に、セル数が少ない別のアニメーションに切り替えたときにエラーが発生する場合がある現象を修正
// 1.5.0 2017/07/03 ループしないアニメーションの終了後に最初のセルに戻るかどうかを選択できる機能を追加
// 1.4.0 2016/09/03 アニメーションに合わせて指定したSEを演奏する機能を追加
// 1.3.2 2016/05/11 クロスフェードを指定していた場合に2回目のアニメ表示でエラーになる場合がある問題を修正
// 1.3.1 2016/03/15 ピクチャ上に戦闘アニメを表示するプラグイン「PictureOnAnimation」との競合を解消
// 原点を中央したピクチャにクロスフェードを行うと表示位置がずれる問題を修正
// 1.3.0 2016/02/28 セル番号を変数と連動する機能を追加
// 処理の負荷を少し軽減
// 1.2.3 2016/02/07 戦闘画面でもピクチャのアニメーションができるように修正
// 1.2.2 2016/01/24 空のピクチャを表示しようとした際にエラーが発生する現象を修正
// 1.2.1 2016/01/16 同じ画像を指定してピクチャ表示→アニメーション準備→ピクチャ表示の順で実行した
// 場合にエラーが発生する現象の修正
// 1.2.0 2016/01/04 セルのパターンを自由に指定できる機能を追加
// セルの最大数を100から200に拡大
// 1.1.2 2015/12/24 クロスフェードによる画像切替に対応しました
// 1.1.1 2015/12/21 ピクチャのファイル名を連番方式で指定できる機能を追加
// アニメーションの強制終了の機能を追加
// 1.0.0 2015/12/19 初版
// ----------------------------------------------------------------------------
// [Blog] : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================
/*:
* @plugindesc ピクチャのアニメーションプラグイン
* @author トリアコンタン
*
* @param 最初のセルに戻る
* @desc ループしないアニメーションの終了後、最初のセルに戻ります。無効にすると最後のセルで止まります。
* @default true
* @type boolean
*
* @help 指定したフレーム間隔でピクチャをアニメーションします。
* アニメーションしたいセル画像(※)を用意の上
* 以下為指令順序。
*
* 1. 准备图片动画(插件指令)
* 2. 表示图片(通常事件指令)
* 3. 开始图片动画(插件指令)
* 4. 结束图片动画(插件指令)
*
* ※配置方法以下有3种。
* 縦 :直一列图片的排列的单一文件。
* 横 :横一列图片的排列的单一文件。
* 連番:连续名的复数图片。(original=任意文字列)
* original00.png(表示图片:您指定的原始文件)
* original01.png
* original02.png...
*
* 插件指令説明
* 事件指令中实行「插件指令」。
* (参数之间用半角空白分隔)
*
* PA_INIT or
* 图片动画准备 [元件数] [帧数] [元件配置方法] [淡出时间]
* 这是为下次实行「表示图片」的动画設定。
* 元件数 :动画元件画象的数目(最大200枚)
* 帧数 :动画间隔的帧数(最低设定为1)
* 元件配置元件元件:元件配置元件(縦 or 横 or 連番)
* 淡出时间:画像切替淡出帧数(设定0则为瞬间切替)
* 使用例:PA_INIT 4 10 連番 20
*
* PA_START or
* 开始图片动画 [图片编号] [动画类型] [自订配列]
* 指定图片番号开始图片动画模式。
* 动画一周后会自动停止。
*
* 动画类形如以下3种模式。
* 示例:当单元格数为4时
* 类型1: 1→2→3→4→1→2→3→4...
* 类型2: 1→2→3→4→3→2→1→2...
* 类型3: 自订配列で指定(动画元件画象最小值为 1)
* 使用例:PA_START 1 2
* PA_START 1 3 [1,2,1,3,1,4]
*
* PA_START_LOOP or
* 启动图片的循环动画 [图片编号] [动画类型] [自订配列]
* 指定图片编号开始图片动画模式。
* 不用指令结束的话;图片动画会循环表示。
* 使用例:PA_START_LOOP 1 2
* PA_START_LOOP 1 3 [1,2,1,3,1,4]
*
* PA_STOP or
* 结束图片的动画[图片编号]
* 指定图片番号结束图片动画模式。
* 会轮到最前面的图片元件才会结束图片动画模式。
* 使用例:PA_STOP 1
*
* PA_STOP_FORCE or
* 中止图片动画 [图片编号]
* 指定图片番号结束图片动画模式。
* 现在表示图片元件;结束图片动画模式。
* 使用例:PA_STOP_FORCE 1
*
* PA_SET_CELL or
* 图片动画单元格設定 [图片编号] [元件编号] [重量]
* 直接设置动画单元格。(单元格的最小值为1)
* 当您想要在任意时间进行动画处理时,这非常有用。
* 设置等待时,等待交叉淡入淡出期间执行事件。
* 使用例:PA_SET_CELL 1 3 重量
*
* PA_PROG_CELL or
* 图片动画图片细胞进展[图片编号] [重量]
* 逐个推进动画单元格。
* 当您想要在任意时间进行动画处理时,这非常有用。
* 设置等待时,在交叉淡入淡出期间,它等待事件的执行。
* 使用例:PA_PROG_CELL 1 重量
*
* 利用規約:MIT
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
(function() {
'use strict';
var pluginName = 'PictureAnimation';
var settings = {
/* maxCellAnimation:セル数の最大値 */
maxCellAnimation: 200
};
var getParamString = function(paramNames) {
if (!Array.isArray(paramNames)) paramNames = [paramNames];
for (var i = 0; i < paramNames.length; i++) {
var name = PluginManager.parameters(pluginName)[paramNames[i]];
if (name) return name;
}
return '';
};
var getParamBoolean = function(paramNames) {
var value = getParamString(paramNames);
return value.toUpperCase() === 'ON' || value.toUpperCase() === 'TRUE';
};
//=============================================================================
// ローカル関数
// プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
//=============================================================================
var getCommandName = function(command) {
return (command || '').toUpperCase();
};
var getArgArrayString = function(args, upperFlg) {
var values = getArgString(args, upperFlg);
return (values || '').split(',');
};
var getArgArrayNumber = function(args, min, max) {
var values = getArgArrayString(args, false);
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
for (var i = 0; i < values.length; i++) values[i] = (parseInt(values[i], 10) || 0).clamp(min, max);
return values;
};
var getArgString = function(arg, upperFlg) {
arg = convertEscapeCharacters(arg);
return upperFlg ? arg.toUpperCase() : arg;
};
var getArgNumber = function(arg, min, max) {
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(convertEscapeCharacters(arg), 10) || 0).clamp(min, max);
};
var convertEscapeCharacters = function(text) {
if (text == null) text = '';
var window = SceneManager._scene._windowLayer.children[0];
return window ? window.convertEscapeCharacters(text) : text;
};
//=============================================================================
// パラメータの取得と整形
//=============================================================================
var param = {};
param.returnToFirstCell = getParamBoolean(['ReturnToFirstCell', '最初のセルに戻る']);
//=============================================================================
// Game_Interpreter
// プラグインコマンドを追加定義します。
//=============================================================================
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
this.pluginCommandPictureAnimation(command, args);
};
Game_Interpreter.prototype.pluginCommandPictureAnimation = function(command, args) {
var pictureNum, animationType, picture, cellNumber, frameNumber, direction, fadeDuration, wait, customArray;
switch (getCommandName(command)) {
case 'PA_INIT' :
case 'ピクチャのアニメーション準備':
cellNumber = getArgNumber(args[0], 1, settings.maxCellAnimation);
frameNumber = getArgNumber(args[1], 1, 9999);
direction = getArgString(args[2], true) || '縦';
fadeDuration = getArgNumber(args[3], 0, 9999) || 0;
$gameScreen.setPicturesAnimation(cellNumber, frameNumber, direction, fadeDuration);
break;
case 'PA_SOUND' :
case 'ピクチャのアニメーション効果音予約':
cellNumber = getArgNumber(args[0], 1, settings.maxCellAnimation);
this.reservePaSound(cellNumber);
break;
case 'PA_START' :
case 'ピクチャのアニメーション開始':
pictureNum = getArgNumber(args[0], 1, $gameScreen.maxPictures());
animationType = getArgNumber(args[1], 1, 3);
customArray = getArgArrayNumber(args[2], 1, settings.maxCellAnimation);
picture = $gameScreen.picture(pictureNum);
if (picture) picture.startAnimationFrame(animationType, false, customArray);
break;
case 'PA_START_LOOP' :
case 'ピクチャのループアニメーション開始':
pictureNum = getArgNumber(args[0], 1, $gameScreen.maxPictures());
animationType = getArgNumber(args[1], 1, 3);
customArray = getArgArrayNumber(args[2], 1, settings.maxCellAnimation);
picture = $gameScreen.picture(pictureNum);
if (picture) picture.startAnimationFrame(animationType, true, customArray);
break;
case 'PA_STOP' :
case 'ピクチャのアニメーション終了':
pictureNum = getArgNumber(args[0], 1, $gameScreen.maxPictures());
picture = $gameScreen.picture(pictureNum);
if (picture) picture.stopAnimationFrame(false);
break;
case 'PA_STOP_FORCE' :
case 'ピクチャのアニメーション強制終了':
pictureNum = getArgNumber(args[0], 1, $gameScreen.maxPictures());
picture = $gameScreen.picture(pictureNum);
if (picture) picture.stopAnimationFrame(true);
break;
case 'PA_SET_CELL' :
case 'ピクチャのアニメーションセル設定':
pictureNum = getArgNumber(args[0], 1, $gameScreen.maxPictures());
cellNumber = getArgNumber(args[1], 1, settings.maxCellAnimation);
wait = getArgString(args[2]);
picture = $gameScreen.picture(pictureNum);
if (picture) {
if (wait === 'ウェイトあり' || wait.toUpperCase() === 'WAIT') this.wait(picture._fadeDuration);
picture.cell = cellNumber;
}
break;
case 'PA_PROG_CELL' :
case 'ピクチャのアニメーションセル進行':
pictureNum = getArgNumber(args[0], 1, $gameScreen.maxPictures());
wait = getArgString(args[1]);
picture = $gameScreen.picture(pictureNum);
if (picture) {
if (wait === 'ウェイトあり' || wait.toUpperCase() === 'WAIT') this.wait(picture._fadeDuration);
picture.addCellCount();
}
break;
case 'PA_SET_VARIABLE' :
case 'ピクチャのアニメーションセル変数の設定':
pictureNum = getArgNumber(args[0], 1, $gameScreen.maxPictures());
picture = $gameScreen.picture(pictureNum);
if (picture) picture.linkToVariable(getArgNumber(args[1]));
break;
}
};
Game_Interpreter.prototype.reservePaSound = function(cellNumber) {
this._paSoundFrame = cellNumber;
};
var _Game_Interpreter_command250 = Game_Interpreter.prototype.command250;
Game_Interpreter.prototype.command250 = function() {
if (this._paSoundFrame) {
var se = this._params[0];
AudioManager.loadStaticSe(se);
$gameScreen.addPaSound(se, this._paSoundFrame);
this._paSoundFrame = null;
return true;
}
return _Game_Interpreter_command250.apply(this, arguments);
};
//=============================================================================
// Game_Screen
// アニメーション関連の情報を追加で保持します。
//=============================================================================
Game_Screen.prototype.setPicturesAnimation = function(cellNumber, frameNumber, direction, fadeDuration) {
this._paCellNumber = cellNumber;
this._paFrameNumber = frameNumber;
this._paDirection = direction;
this._paFadeDuration = fadeDuration;
};
Game_Screen.prototype.addPaSound = function(sound, frame) {
if (!this._paSounds) this._paSounds = [];
this._paSounds[frame] = sound;
};
Game_Screen.prototype.clearPicturesAnimation = function() {
this._paCellNumber = 1;
this._paFrameNumber = 1;
this._paDirection = '';
this._paFadeDuration = 0;
this._paSounds = null;
};
var _Game_Screen_showPicture = Game_Screen.prototype.showPicture;
Game_Screen.prototype.showPicture = function(pictureId, name, origin, x, y,
scaleX, scaleY, opacity, blendMode) {
_Game_Screen_showPicture.apply(this, arguments);
var realPictureId = this.realPictureId(pictureId);
if (this._paCellNumber > 1) {
this._pictures[realPictureId].setAnimationFrameInit(
this._paCellNumber, this._paFrameNumber, this._paDirection, this._paFadeDuration, this._paSounds);
this.clearPicturesAnimation();
}
};
//=============================================================================
// Game_Picture
// アニメーション関連の情報を追加で保持します。
//=============================================================================
var _Game_Picture_initialize = Game_Picture.prototype.initialize;
Game_Picture.prototype.initialize = function() {
_Game_Picture_initialize.call(this);
this.initAnimationFrameInfo();
};
Game_Picture.prototype.initAnimationFrameInfo = function() {
this._cellNumber = 1;
this._frameNumber = 1;
this._cellCount = 0;
this._frameCount = 0;
this._animationType = 0;
this._customArray = null;
this._loopFlg = false;
this._direction = '';
this._fadeDuration = 0;
this._fadeDurationCount = 0;
this._prevCellCount = 0;
this._animationFlg = false;
this._linkedVariable = 0;
this._cellSes = [];
};
Game_Picture.prototype.direction = function() {
return this._direction;
};
Game_Picture.prototype.cellNumber = function() {
return this._cellNumber;
};
Game_Picture.prototype.prevCellCount = function() {
return this._prevCellCount;
};
Game_Picture.prototype.isMulti = function() {
var dir = this.direction();
return dir === '連番' || dir === 'N';
};
/**
* The cellCount of the Game_Picture (0 to cellNumber).
*
* @property cellCount
* @type Number
*/
Object.defineProperty(Game_Picture.prototype, 'cell', {
get: function() {
if (this._linkedVariable > 0) {
return $gameVariables.value(this._linkedVariable) % this._cellNumber;
}
switch (this._animationType) {
case 3:
return (this._customArray[this._cellCount] - 1).clamp(0, this._cellNumber - 1);
case 2:
return this._cellNumber - 1 - Math.abs(this._cellCount - (this._cellNumber - 1));
case 1:
return this._cellCount;
default:
return this._cellCount;
}
},
set: function(value) {
var newCellCount = value % this.getCellNumber();
if (this._cellCount !== newCellCount) {
this._prevCellCount = this.cell;
this._fadeDurationCount = this._fadeDuration;
}
this._cellCount = newCellCount;
}
});
Game_Picture.prototype.getCellNumber = function() {
switch (this._animationType) {
case 3:
return this._customArray.length;
case 2:
return (this._cellNumber - 1) * 2;
case 1:
return this._cellNumber;
default:
return this._cellNumber;
}
};
var _Game_Picture_update = Game_Picture.prototype.update;
Game_Picture.prototype.update = function() {
_Game_Picture_update.call(this);
if (this.isFading()) {
this.updateFading();
} else if (this.hasAnimationFrame()) {
this.updateAnimationFrame();
}
};
Game_Picture.prototype.linkToVariable = function(variableNumber) {
this._linkedVariable = variableNumber.clamp(1, $dataSystem.variables.length);
};
Game_Picture.prototype.updateAnimationFrame = function() {
this._frameCount = (this._frameCount + 1) % this._frameNumber;
if (this._frameCount === 0) {
this.addCellCount();
this.playCellSe();
if (this.isEndFirstLoop() && !this._loopFlg) {
this._animationFlg = false;
}
}
};
Game_Picture.prototype.isEndFirstLoop = function() {
return this._cellCount === (param.returnToFirstCell ? 0 : this._cellNumber - 1);
};
Game_Picture.prototype.updateFading = function() {
this._fadeDurationCount--;
};
Game_Picture.prototype.prevCellOpacity = function() {
if (this._fadeDuration === 0) return 0;
return this.opacity() / this._fadeDuration * this._fadeDurationCount;
};
Game_Picture.prototype.addCellCount = function() {
this.cell = this._cellCount + 1;
};
Game_Picture.prototype.playCellSe = function() {
var se = this._cellSes[this.cell + 1];
if (se) {
AudioManager.playSe(se);
}
};
Game_Picture.prototype.setAnimationFrameInit = function(cellNumber, frameNumber, direction, fadeDuration, cellSes) {
this._cellNumber = cellNumber;
this._frameNumber = frameNumber;
this._frameCount = 0;
this._cellCount = 0;
this._direction = direction;
this._fadeDuration = fadeDuration;
this._cellSes = cellSes || [];
};
Game_Picture.prototype.startAnimationFrame = function(animationType, loopFlg, customArray) {
this._animationType = animationType;
this._customArray = customArray;
this._animationFlg = true;
this._loopFlg = loopFlg;
if (this._cellNumber <= this._cellCount) {
this._cellCount = this._cellNumber - 1;
}
};
Game_Picture.prototype.stopAnimationFrame = function(forceFlg) {
this._loopFlg = false;
if (forceFlg) {
this._animationFlg = false;
}
};
Game_Picture.prototype.hasAnimationFrame = function() {
return this._animationFlg;
};
Game_Picture.prototype.isFading = function() {
return this._fadeDurationCount !== 0;
};
Game_Picture.prototype.isNeedFade = function() {
return this._fadeDuration !== 0;
};
//=============================================================================
// Sprite_Picture
// アニメーション関連の情報を追加で保持します。
//=============================================================================
var _Sprite_Picture_initialize = Sprite_Picture.prototype.initialize;
Sprite_Picture.prototype.initialize = function(pictureId) {
this._prevSprite = null;
_Sprite_Picture_initialize.apply(this, arguments);
};
var _Sprite_Picture_update = Sprite_Picture.prototype.update;
Sprite_Picture.prototype.update = function() {
_Sprite_Picture_update.apply(this, arguments);
var picture = this.picture();
if (picture && picture.name()) {
if (picture.isMulti() && !this._bitmaps) {
this.loadAnimationBitmap();
}
if (this.isBitmapReady()) {
this.updateAnimationFrame(this, picture.cell);
if (picture.isNeedFade()) this.updateFading();
}
}
};
var _Sprite_Picture_updateBitmap = Sprite_Picture.prototype.updateBitmap;
Sprite_Picture.prototype.updateBitmap = function() {
_Sprite_Picture_updateBitmap.apply(this, arguments);
if (!this.picture()) {
this._bitmaps = null;
if (this._prevSprite) {
this._prevSprite.bitmap = null;
}
}
};
Sprite_Picture.prototype.updateFading = function() {
if (!this._prevSprite) {
this.makePrevSprite();
}
if (!this._prevSprite.bitmap) {
this.makePrevBitmap();
}
var picture = this.picture();
if (picture.isFading()) {
this._prevSprite.visible = true;
this.updateAnimationFrame(this._prevSprite, picture.prevCellCount());
this._prevSprite.opacity = picture.prevCellOpacity();
} else {
this._prevSprite.visible = false;
}
};
Sprite_Picture.prototype.updateAnimationFrame = function(sprite, cellCount) {
switch (this.picture().direction()) {
case '連番':
case 'N':
sprite.bitmap = this._bitmaps[cellCount];
sprite.setFrame(0, 0, sprite.bitmap.width, sprite.bitmap.height);
break;
case '縦':
case 'V':
var height = sprite.bitmap.height / this.picture().cellNumber();
var y = cellCount * height;
sprite.setFrame(0, y, sprite.bitmap.width, height);
break;
case '横':
case 'H':
var width = sprite.bitmap.width / this.picture().cellNumber();
var x = cellCount * width;
sprite.setFrame(x, 0, width, sprite.bitmap.height);
break;
default:
sprite.setFrame(0, 0, this.bitmap.width, this.bitmap.height);
}
};
var _Sprite_Picture_loadBitmap = Sprite_Picture.prototype.loadBitmap;
Sprite_Picture.prototype.loadBitmap = function() {
_Sprite_Picture_loadBitmap.apply(this, arguments);
this._bitmapReady = false;
this._bitmaps = null;
};
Sprite_Picture.prototype.loadAnimationBitmap = function() {
var cellNumber = this.picture().cellNumber();
var cellDigit = cellNumber.toString().length;
this._bitmaps = [this.bitmap];
for (var i = 1; i < cellNumber; i++) {
var filename = this._pictureName.substr(0, this._pictureName.length - cellDigit) + i.padZero(cellDigit);
this._bitmaps[i] = ImageManager.loadPicture(filename);
}
this._bitmapReady = false;
};
Sprite_Picture.prototype.makePrevSprite = function() {
this._prevSprite = new Sprite();
this._prevSprite.visible = false;
this.addChild(this._prevSprite);
};
Sprite_Picture.prototype.makePrevBitmap = function() {
this._prevSprite.bitmap = this.bitmap;
this._prevSprite.anchor.x = this.anchor.x;
this._prevSprite.anchor.y = this.anchor.y;
};
Sprite_Picture.prototype.isBitmapReady = function() {
if (!this.bitmap) return false;
if (this._bitmapReady) return true;
var result;
if (this.picture().isMulti()) {
result = this._bitmaps.every(function(bitmap) {
return bitmap.isReady();
});
} else {
result = this.bitmap.isReady();
}
this._bitmapReady = result;
return result;
};
})(); |
|