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

Project1

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

[已经解决] MV里面的图片显示顺序

[复制链接]

Lv2.观梦者

梦石
0
星屑
676
在线时间
224 小时
注册时间
2006-12-7
帖子
839
跳转到指定楼层
1
发表于 2015-12-7 14:47:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这次貌似没有看到以前那种简单的z坐标设定 z坐标越大的图层显示越靠前
mv貌似是按照命令的顺序决定哪个图层先显示?
试了下给敌人的战斗图加影子,结果影子一直在敌人战斗图上面
主角的影子貌似没有问题
看代码里面似乎是因为主角的初始化是影子在前 人物图在后?
但是敌人似乎没有这样的结构不知道要怎么写才能让敌人影子在图片下方。。。
  1. Sprite_Actor.prototype.initMembers = function() {
  2.     Sprite_Battler.prototype.initMembers.call(this);
  3.     this._battlerName = '';
  4.     this._motion = null;
  5.     this._motionCount = 0;
  6.     this._pattern = 0;
  7.     this.createShadowSprite();
  8.     this.createWeaponSprite();
  9.     this.createMainSprite();
  10.     this.createStateSprite();
  11. };
复制代码

Lv1.梦旅人

梦石
0
星屑
50
在线时间
119 小时
注册时间
2015-1-5
帖子
139
2
发表于 2015-12-7 15:22:45 | 只看该作者
本帖最后由 MonsterJohnCN 于 2015-12-9 20:51 编辑

作废,下方正确答案
实力跳票,根本停不下来…… | bgpCore.js | 《下一站》2号DEMO | 插件开发无限延期中……正在研制适用性更强的普适模板,不再输出单体插件……
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

3
发表于 2015-12-7 17:43:48 | 只看该作者
可以用 parent.children.sort(func) 方式来根据指定规则排序。参考 Tilemap#sortChildren 方法(没记错吧 TAT

点评

涨姿势  发表于 2015-12-9 20:50

评分

参与人数 1梦石 +1 收起 理由
余烬之中 + 1 男票触死了

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
386 小时
注册时间
2007-7-27
帖子
4106

开拓者

4
发表于 2015-12-7 20:46:23 | 只看该作者
是按照addchild顺序来的
所以可以不用addChild,改成addChildAt(child, index)

楼上的办法更好,不过得先把z给定义上去然后再排序

评分

参与人数 1星屑 +60 收起 理由
doranikofu + 60 认可答案

查看全部评分

吸吸
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
676
在线时间
224 小时
注册时间
2006-12-7
帖子
839
5
 楼主| 发表于 2015-12-8 11:46:32 | 只看该作者
本帖最后由 doranikofu 于 2015-12-8 14:40 编辑

敌人的战斗图结构和主角完全不一样 感觉需要改写成addchild方式显示图片才行么
一会儿试试,影子是自己用addchild加的,战斗主图在初始化的函数里面没有看到内容 直接用的updatebitmap似乎
  1. Sprite_Enemy.prototype.updateBitmap = function() {
  2.     Sprite_Battler.prototype.updateBitmap.call(this);
  3.     var name = this._enemy.battlerName();
  4.     var hue = this._enemy.battlerHue();
  5.     if (this._battlerName !== name || this._battlerHue !== hue) {
  6.         this._battlerName = name;
  7.         this._battlerHue = hue;
  8.         this.loadBitmap(name, hue);
  9.         this.initVisibility();
  10.     }
  11. };

  12. Sprite_Enemy.prototype.loadBitmap = function(name, hue) {
  13.     if ($gameSystem.isSideView()) {
  14.         this.bitmap = ImageManager.loadSvEnemy(name, hue);
  15.     } else {
  16.         this.bitmap = ImageManager.loadEnemy(name, hue);
  17.     }
  18. };
复制代码
同时还发现蛋疼的问题就是横版战斗的话,虽然人物图层顺序正常,但是播放技能动画的时候技能动画似乎是永远在所有人物敌人上方,没有应该的z坐标概念了。按这个结构的话感觉要大改才行?

点评

没有啊 以前xp就是分层的 做动画的时候可以选择是全屏还是按对象 z应该是跟随的目标的z 所以横版的话显示顺序是正常的  发表于 2015-12-9 10:03
rm的动画一直都是最上层呀……  发表于 2015-12-8 21:56
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
676
在线时间
224 小时
注册时间
2006-12-7
帖子
839
6
 楼主| 发表于 2015-12-9 14:48:19 | 只看该作者
看了下敌人的战斗图是直接
this.bitmap = xxxx
似乎是无论怎么addchild都会在这个bitmap之上

而主角的话战斗图是this._mainSprite.bitmap
通过addchild挂上去的所以很容易排序

这种情况有啥解决办法没。本来想addchild挂战斗图然后bitmp挂影子,但是发现各种效果都是操作在bitmap上的,没法直接这样改。要改的话等于要把整个结构重新写一遍。。。。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
676
在线时间
224 小时
注册时间
2006-12-7
帖子
839
7
 楼主| 发表于 2015-12-14 09:43:05 | 只看该作者
共享一下trentswd菊苣写的插件
如果用呼吸敌人脚本或者默认静态图敌人想加影子的可以用这个 可能需要根据具体情况稍微改一下
主要在updateBitmap 其他一些scale功能不一定需要
用这个的话影子就能显示在主sprite下方
JAVASCRIPT 代码复制
  1. //==================trentswd shadow plugin
  2. /*:
  3.  * @plugindesc add shadow to static enemy
  4.  *
  5. */
  6.  
  7. var Dora = Dora || {};
  8. Dora.shadow = Dora.shadow || {};
  9.  
  10. Dora.shadow._sprite_enemy_initMembers_ = Sprite_Enemy.prototype.initMembers;
  11. Sprite_Enemy.prototype.initMembers = function() {
  12.    this.createShadowSprite();
  13.    Dora.shadow._sprite_enemy_initMembers_.call(this);
  14.    this.hasShadow = false;
  15. };
  16.  
  17. Dora.shadow._sprite_enemy_sprite_updateBitmap_d = Sprite_Enemy.prototype.updateBitmap;
  18. Sprite_Enemy.prototype.updateBitmap = function() {
  19.    Dora.shadow._sprite_enemy_sprite_updateBitmap_d.call(this);
  20.    this._shadowSprite.scale.x = this.bitmap.width / 80; //doranikofu edit
  21.    this._shadowSprite.scale.y = this.bitmap.height / 100; //doranikofu edit
  22.    if (this.parent && !this.hasShadow) {
  23.      var index = this.parent.getChildIndex(this);
  24.      if (index >= 0) {
  25.        this.parent.addChildAt(this._shadowSprite, index);
  26.        this.updateShadowPosition();
  27.        this.hasShadow = true;
  28.      }
  29.    }
  30. };
  31.  
  32. Sprite_Enemy.prototype.createShadowSprite = function() {
  33.    this._shadowSprite = new Sprite();
  34.    this._shadowSprite.bitmap = ImageManager.loadSystem('Shadow2');
  35.    this._shadowSprite.anchor.x = 0.5;
  36.    this._shadowSprite.anchor.y = 0.5;
  37.    this._shadowSprite.y = -15;
  38.    this._shadowSprite.z = -1;
  39.    this._shadowSprite.bitmap.smooth = true;
  40. };
  41.  
  42. Sprite_Enemy.prototype.updateShadowPosition = function() {
  43.    this._shadowSprite.x = this.x;
  44.    this._shadowSprite.y = this.y;
  45.    this._shadowSprite.scale.x *= this.scale.x;
  46.    this._shadowSprite.scale.y *= this.scale.y;
  47. };
  48.  
  49. Dora.shadow.Sprite_Enemy_updatePosition = Sprite_Enemy.prototype.updatePosition;
  50. Sprite_Enemy.prototype.updatePosition = function() {
  51.    Dora.shadow.Sprite_Enemy_updatePosition.call(this);
  52.    this.updateShadowPosition();
  53. };
  54.  
  55.  
  56. Dora.shadow.Sprite_Enemy_updateBreathing = Sprite_Enemy.prototype.updateBreathing;
  57. Sprite_Enemy.prototype.updateBreathing = function() {
  58.     Dora.shadow.Sprite_Enemy_updateBreathing.call(this);
  59.         var s = (0.78+0.3*this.y/Graphics.boxHeight);
  60.     this.scale.x *= s;
  61.     this.scale.y *= s;
  62. };
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-22 21:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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