101 lines
3 KiB
JavaScript
101 lines
3 KiB
JavaScript
/*:
|
|
* @target MZ
|
|
* @plugindesc ピクチャを揺らすスクリプト
|
|
* @author
|
|
*
|
|
* @help $gameScreen.startPicShake(ピクチャ番号, 強さ, スピード, フレーム);
|
|
* で1, 4, 5, 6, 7, 8番のピクチャを揺らす
|
|
*
|
|
*/
|
|
|
|
(function () {
|
|
var Sprite_Picture_updatePosition = Sprite_Picture.prototype.updatePosition;
|
|
Sprite_Picture.prototype.updatePosition = function () {
|
|
Sprite_Picture_updatePosition.call(this);
|
|
|
|
var ary = [1, 4, 5, 6, 7, 8, 9, 10];
|
|
var idx = ary.indexOf(this._pictureId);
|
|
|
|
if (idx != -1) {
|
|
this.x += $gameScreen.shakePic(idx);
|
|
}
|
|
};
|
|
|
|
var Game_Screen_clear = Game_Screen.prototype.clear;
|
|
Game_Screen.prototype.clear = function () {
|
|
Game_Screen_clear.call(this);
|
|
|
|
var ary = [1, 4, 5, 6, 7, 8, 9, 10];
|
|
for (var i = 0; i < ary.length; i++) {
|
|
this.clearPicShake(i);
|
|
}
|
|
};
|
|
|
|
var Game_Screen_update = Game_Screen.prototype.update;
|
|
Game_Screen.prototype.update = function () {
|
|
Game_Screen_update.call(this);
|
|
|
|
this.updatePicShake();
|
|
};
|
|
|
|
Game_Screen.prototype.startPicShake = function (num, power, speed, duration) {
|
|
this._shakePicPower = this._shakePicPower || [];
|
|
this._shakePicSpeed = this._shakePicSpeed || [];
|
|
this._shakePicDuration = this._shakePicDuration || [];
|
|
this._shakePicDirection = this._shakePicDirection || [];
|
|
this._shakePic = this._shakePic || [];
|
|
|
|
var ary = [1, 4, 5, 6, 7, 8, 9, 10];
|
|
var idx = ary.indexOf(num);
|
|
|
|
this._shakePic[idx] = 1;
|
|
this._shakePicPower[idx] = power;
|
|
this._shakePicSpeed[idx] = speed;
|
|
this._shakePicDuration[idx] = duration;
|
|
this._shakePicDirection[idx] = 1;
|
|
};
|
|
|
|
Game_Screen.prototype.clearPicShake = function (idx) {
|
|
this._shakePicPower = this._shakePicPower || [];
|
|
this._shakePicSpeed = this._shakePicSpeed || [];
|
|
this._shakePicDuration = this._shakePicDuration || [];
|
|
this._shakePicDirection = this._shakePicDirection || [];
|
|
this._shakePic = this._shakePic || [];
|
|
|
|
this._shakePicPower[idx] = 0;
|
|
this._shakePicSpeed[idx] = 0;
|
|
this._shakePicDuration[idx] = 0;
|
|
|
|
this._shakePicDirection[idx] = 1;
|
|
this._shakePic[idx] = 0;
|
|
};
|
|
|
|
Game_Screen.prototype.shakePic = function (idx) {
|
|
return this._shakePic[idx] || 0;
|
|
};
|
|
|
|
Game_Screen.prototype.updatePicShake = function () {
|
|
var ary = [1, 4, 5, 6, 7, 8, 9, 10];
|
|
for (var i = 0; i < ary.length; i++) {
|
|
if (this._shakePicDuration && this._shakePicDuration[i] > 0 && this._shakePic[i] !== 0) {
|
|
const delta = (this._shakePicPower[i] * this._shakePicSpeed[i] * this._shakePicDirection[i]) / 10;
|
|
if (this._shakePicDuration[i] <= 1 && this._shakePic[i] * (this._shakePic[i] + delta) < 0) {
|
|
this._shakePic[i] = 0;
|
|
} else {
|
|
this._shakePic[i] += delta;
|
|
}
|
|
if (this._shakePic[i] > this._shakePicPower[i] * 2) {
|
|
this._shakePicDirection[i] = -1;
|
|
}
|
|
if (this._shakePic[i] < -this._shakePicPower[i] * 2) {
|
|
this._shakePicDirection[i] = 1;
|
|
}
|
|
this._shakePicDuration[i]--;
|
|
|
|
if (this._shakePicDuration[i] < 1) {
|
|
this._shakePic[i] = 0;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
})();
|