设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 329|回复: 4
打印 上一主题 下一主题

[有事请教] 关于一些演出效果的制作问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
169
在线时间
25 小时
注册时间
2024-2-15
帖子
12
跳转到指定楼层
1
发表于 2024-9-30 16:27:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
因为做的是微恐向小游戏,想要做出一些经典的演出 还没开始做,只想了一些思路,不知道能不能实现,还有些连思路都没有,求助……
1.比如 主角在监控室 碰到某个开关后,墙上的屏幕刷下全部花屏(没思路)

2.主角在浴室里触发机关 门缝里流出血液 (这个靠加图片实现了) 然后进行QTE,失败后血液扩散开,铺满浴室把主角包裹住。
后半部分的太难实现了,没有思路。

3.主角在巨大的砧板上跑 后面巨大厨师看着主角 时不时天空中落下巨大的砍刀……
这个的话 把砧板设置为地图 厨师作为背景图 但是怎么让厨师背景图动起来,如果能看着主角移动就更好了。落下的砍刀使用行走图实现?但是怎么设置事件 主角被砍到会死亡

想实现的效果太多,感觉有点贪心了,但是还是想尝试下。主要是玩了细胞神曲后大受触动,原来RPG也可以做出这么有趣的演出效果。我也想做,教练教教我

Lv3.寻梦者

梦石
0
星屑
1112
在线时间
512 小时
注册时间
2015-8-23
帖子
112
5
发表于 2024-10-10 13:06:59 | 只看该作者
我只是说说哈     不一定适合你    之前我用了动态的无线图层  你所说的是功能都能实现  但是血液扩散这个   我觉得还是用楼上说的可能会好一些  因为血液扩散完后应该就停止了   不会继续循环   但是电视的可以循环播放雪花    当然楼上说的行走图也行
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5189
在线时间
738 小时
注册时间
2018-1-16
帖子
151
4
发表于 2024-10-10 08:16:13 | 只看该作者
//=============================================================================
// PicturePriorityCustomize.js
// ----------------------------------------------------------------------------
// (C) 2017 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.2.2 2021/08/05 上層ピクチャが画面シェイクに連動しない問題を修正
// 1.2.1 2019/05/08 1.2.0の機能がYEP_BattleEngineCore.jsと併用すると無効になる競合を解消
// 1.2.0 2019/05/02 戦闘画面における下層ピクチャの表示優先度を微調整する機能を追加
// 1.1.3 2019/01/20 MenuCommonEvent.jsとの競合によるエラーを解消
// 1.1.2 2018/06/27 1.1.1の対応により発生したYEP_BattleEngineCore.jsとの競合を解消
// 1.1.1 2017/12/24 GALV_LayerGraphics.jsと併用したときに画像がちらつく競合を解消
// 1.1.0 2017/10/01 パラメータの型指定機能に対応
// 1.0.0 2017/03/20 初版
// ----------------------------------------------------------------------------
// [Blog]   : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
* @plugindesc PicturePriorityCustomizePlugin
* @author triacontane
*
* @param UpperPictureId
* @desc 指定した番号以上のピクチャはウィンドウより上に表示されるようになります。
* @default 101
* @type number
*
* @param LowerPictureId
* @desc 指定した番号以下のピクチャはキャラクター、バトラーより下に表示されるようになります。
* @default 0
* @type number
*
* @param LowerPictureZ
* @desc 下層ピクチャのZ座標です。変更することでより細かい表示優先度の調整ができます。
* @default 1
* @type select
* @option 下層タイル
* @value 0
* @option 通常キャラの下
* @value 1
* @option 通常キャラと同じ
* @value 3
* @option 上層タイル
* @value 4
* @option 通常キャラの上
* @value 5
* @option 飛行船の影
* @value 6
* @option フキダシ
* @value 7
* @option マップタッチの行き先
* @value 9
*
* @param LowerPictureBattleZ
* @desc 戦闘画面の下層ピクチャのZ座標です。変更することでより細かい表示優先度の調整ができます。
* @default 0
* @type select
* @option 敵キャラ
* @value 0
* @option アニメーション
* @value 1
*
* @help ピクチャを上層、中層、下層に分けて表示できます。
* 上層:ウィンドウより上
* 中層:デフォルトの優先度
* 下層:キャラクターより下
*
* 下層ピクチャに対しては、Z座標を設定することで
* より細かい表示優先度の調整ができます。
*
* ※それぞれのプライオリティの値
* 0 : 下層タイル
* 1 : 通常キャラの下
* 3 : 通常キャラと同じ
* 4 : 上層タイル
* 5 : 通常キャラの上
* 6 : 飛行船の影
* 7 : フキダシ
* 8 : アニメーション
* 9 : マップタッチの行き先(白く光るヤツ)
*
* このプラグインにはプラグインコマンドはありません。
*
* This plugin is released under the MIT License.
*/
/*:ja
* @plugindesc ピクチャの表示優先度調整プラグイン
* @author トリアコンタン
*
* @param 上層ピクチャ番号
* @desc 指定した番号以上のピクチャはウィンドウより上に表示されるようになります。
* @default 101
* @type number
*
* @param 下層ピクチャ番号
* @desc 指定した番号以下のピクチャはキャラクター、バトラーより下に表示されるようになります。
* @default 0
* @type number
*
* @param 下層ピクチャZ座標
* @desc 下層ピクチャのZ座標です。変更することでより細かい表示優先度の調整ができます。
* @default 1
* @type select
* @option 下層タイル
* @value 0
* @option 通常キャラの下
* @value 1
* @option 通常キャラと同じ
* @value 3
* @option 上層タイル
* @value 4
* @option 通常キャラの上
* @value 5
* @option 飛行船の影
* @value 6
* @option フキダシ
* @value 7
* @option マップタッチの行き先
* @value 9
*
* @param 戦闘下層ピクチャZ座標
* @desc 戦闘画面の下層ピクチャのZ座標です。変更することでより細かい表示優先度の調整ができます。
* @default 0
* @type select
* @option 敵キャラ
* @value 0
* @option アニメーション
* @value 1
*
* @help ピクチャを上層、中層、下層に分けて表示できます。
* 上層:ウィンドウより上
* 中層:デフォルトの優先度
* 下層:キャラクターより下
*
* 下層ピクチャに対しては、Z座標を設定することで
* より細かい表示優先度の調整ができます。
*
* ※それぞれのプライオリティの値
* 0 : 下層タイル
* 1 : 通常キャラの下
* 3 : 通常キャラと同じ
* 4 : 上層タイル
* 5 : 通常キャラの上
* 6 : 飛行船の影
* 7 : フキダシ
* 8 : アニメーション
* 9 : マップタッチの行き先(白く光るヤツ)
*
* このプラグインにはプラグインコマンドはありません。
*
* 利用規約:
*  作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
*  についても制限はありません。
*  このプラグインはもうあなたのものです。
*/

(function() {
    'use strict';
    const pluginName = 'PicturePriorityCustomize';

    //=============================================================================
    // ローカル関数
    //  プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
    //=============================================================================
    const getParamString = function(paramNames) {
        if (!Array.isArray(paramNames)) paramNames = [paramNames];
        for (let i = 0; i < paramNames.length; i++) {
            const name = PluginManager.parameters(pluginName)[paramNames];
            if (name) return name;
        }
        return '';
    };

    const getParamNumber = function(paramNames, min, max) {
        const value = getParamString(paramNames);
        if (arguments.length < 2) min = -Infinity;
        if (arguments.length < 3) max = Infinity;
        return (parseInt(value) || 0).clamp(min, max);
    };

    //=============================================================================
    // パラメータの取得と整形
    //=============================================================================
    const param               = {};
    param.upperPictureId      = getParamNumber(['UpperPictureId', '上層ピクチャ番号']);
    param.lowerPictureId      = getParamNumber(['LowerPictureId', '下層ピクチャ番号']);
    param.lowerPictureZ       = getParamNumber(['LowerPictureZ', '下層ピクチャZ座標']);
    param.lowerPictureBattleZ = getParamNumber(['LowerPictureBattleZ', '戦闘下層ピクチャZ座標'], 0);

    //=============================================================================
    // Scene_Base
    //  ウィンドウの上にピクチャを配置します。
    //=============================================================================
    var _Scene_Base_createWindowLayer      = Scene_Base.prototype.createWindowLayer;
    Scene_Base.prototype.createWindowLayer = function() {
        _Scene_Base_createWindowLayer.apply(this, arguments);
        if (this._spriteset) {
            this._spriteset.setUpperPictureContainer(this);
        }
    };

    //=============================================================================
    // Spriteset_Base
    //  ピクチャを三層に分割します。
    //=============================================================================
    var _Spriteset_Base_createPictures      = Spriteset_Base.prototype.createPictures;
    Spriteset_Base.prototype.createPictures = function() {
        _Spriteset_Base_createPictures.apply(this, arguments);
        this.removeChild(this._pictureContainer);
        this.createPictureLayer();
    };

    Spriteset_Base.prototype.createPictureLayer = function() {
        var width                   = Graphics.boxWidth;
        var height                  = Graphics.boxHeight;
        var x                       = (Graphics.width - width) / 2;
        var y                       = (Graphics.height - height) / 2;
        this._pictureContainerLower = new Sprite();
        this._pictureContainerLower.setFrame(x, y, width, height);
        this._pictureContainerMiddle = new Sprite();
        this._pictureContainerMiddle.setFrame(x, y, width, height);
        this._pictureContainerUpper = new Sprite();
        this._pictureContainerUpper.setFrame(x, y, width, height);
        var pictureArray = this._pictureContainer.children.clone();
        pictureArray.forEach(function(picture) {
            var pictureId = picture.getPictureId();
            if (pictureId <= param.lowerPictureId) {
                this._pictureContainerLower.addChild(picture);
            } else if (pictureId >= param.upperPictureId) {
                this._pictureContainerUpper.addChild(picture);
            } else {
                this._pictureContainerMiddle.addChild(picture);
            }
        }, this);
        this._pictureContainer.children = pictureArray;
        this.setLowerPictureContainer();
        this.setMiddlePictureContainer();
    };

    Spriteset_Base.prototype.setUpperPictureContainer = function(parentScene) {
        parentScene.addChild(this._pictureContainerUpper);
    };

    Spriteset_Base.prototype.setMiddlePictureContainer = function() {
        this.addChild(this._pictureContainerMiddle);
    };

    Spriteset_Base.prototype.setLowerPictureContainer = function() {
        this.addChild(this._pictureContainerLower);
    };

    var _Spriteset_Base_updatePosition = Spriteset_Base.prototype.updatePosition;
    Spriteset_Base.prototype.updatePosition = function() {
        _Spriteset_Base_updatePosition.apply(this, arguments);
        this._pictureContainerUpper.x = this.x;
        this._pictureContainerUpper.y = this.y;
    };

    //=============================================================================
    // Spriteset_Map
    //  下層ピクチャの位置を設定します。
    //=============================================================================
    Spriteset_Map.prototype.setLowerPictureContainer = function() {
        this._pictureContainerLower.z = param.lowerPictureZ;
        this._tilemap.addChild(this._pictureContainerLower);
    };

    //=============================================================================
    // Spriteset_Battle
    //  下層ピクチャの位置を設定します。
    //=============================================================================
    Spriteset_Battle.prototype.setLowerPictureContainer = function() {
        this.updateLowerPictureContainerZ();
        // resolve conflict for GALV_LayerGraphics.js
        if (typeof Imported !== 'undefined' && Imported.Galv_LayerGraphics) {
            this._pictureContainerLower.z = 2;
        }
    };

    Spriteset_Battle.prototype.updateLowerPictureContainerZ = function() {
        var compare = param.lowerPictureBattleZ > 0 ? this._enemySprites[this._enemySprites.length - 1] :
            this._back2Sprite;
        var index = this._battleField.getChildIndex(compare);
        this._battleField.addChildAt(this._pictureContainerLower, index + 1);
    };

    if (typeof Yanfly !== 'undefined' && Yanfly.BEC) {
        var _Spriteset_Battle_update = Spriteset_Battle.prototype.update;
        Spriteset_Battle.prototype.update = function() {
            _Spriteset_Battle_update.apply(this, arguments);
            this.updateLowerPictureContainerZ();
        };
    }

    //=============================================================================
    // Sprite_Picture
    //  ピクチャIDを取得可能にします。
    //=============================================================================
    Sprite_Picture.prototype.getPictureId = function() {
        return this._pictureId;
    };
})();


这个插件可以更改图片的层级。
我Flash有问题,上传不了附件,你自己复制一下吧
回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
169
在线时间
25 小时
注册时间
2024-2-15
帖子
12
3
 楼主| 发表于 2024-10-9 15:25:46 | 只看该作者
shantianzu 发表于 2024-10-1 08:06
1:墙上的屏幕用事件的行走图显示,碰到某个开关后,改变行走图就可以了
2:多画几张血液的图片,流出血液 ...

感谢回复
关于2的话 使用显示图片的话 不是会直接把主角和地图全盖住嘛 这样看起来就像是血浮在空中了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5189
在线时间
738 小时
注册时间
2018-1-16
帖子
151
2
发表于 2024-10-1 08:06:47 | 只看该作者
1:墙上的屏幕用事件的行走图显示,碰到某个开关后,改变行走图就可以了
2:多画几张血液的图片,流出血液一张,QTE每次失败血液扩散的时候每次一张,最后铺满浴室一张,再失败就在主角的位置显示一张把主角包住的图片把主角盖住
3:巨大厨师也用图片显示,身体一张,砍刀一张,在砍刀落下时与主角重叠的位置设置事件,砍刀落下时移动此事件,主角碰到事件后直接死亡。
你的问题有点多,只能大概的说明一下,未经过实验,应该可以这样实现。推荐一下Drill大佬的插件合集,论坛里就有,里面有你需要的插件。
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-25 18:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表