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

Project1

 找回密码
 注册会员
搜索
楼主: andrewx
打印 上一主题 下一主题

[原创发布] 【自用·测试】图块遮挡角色半透明

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
11
发表于 2016-1-2 19:28:49 | 只看该作者
本帖最后由 汪汪 于 2016-1-2 19:30 编辑
andrewx 发表于 2016-1-2 18:56
试了下发现没法跟墙壁后行走插件兼容(必然),
果然是绕回来了,一开始我也想过这么做TvT ...
忽然想到一个缺点.............人物太高的话....会很奇怪吧(话说,本来人物很高就会很奇怪好吧................我要xp)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
12
发表于 2016-1-2 20:17:13 | 只看该作者
  1. //=============================================================================
  2. // ceshi.js
  3. //=============================================================================
  4. /*:
  5. * @plugindesc 名称
  6. * @author wangwang作者信息
  7. *
  8. * @param cs
  9. * @desc 默认参数
  10. * @default 汪汪
  11. *
  12. * @help
  13. * 帮助的信息
  14. * 就像这样...........
  15. *
  16. */


  17.   
  18. (function() {


  19. })();
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
388 小时
注册时间
2009-8-4
帖子
219
13
 楼主| 发表于 2016-1-2 20:36:42 | 只看该作者
汪汪 发表于 2016-1-2 19:28
[fold][/fold]忽然想到一个缺点.............人物太高的话....会很奇怪吧(话说,本来人物很高就会很奇怪好 ...

是说满两格及更高的角色会被切头吗?噫这是痛处
附带插件里面有个CP_Large_Sprite_Fix可以解决,但是用了以后帧速明显会拖慢。。。。。

点评

但是角色究竟有多高,什么情况下会被遮挡感觉也比较难把握。另外我这个插件遇到八方向行走问题更多。。。我也想要XP的地图。。。  发表于 2016-1-2 21:03
看了一下,其实可以考虑把第一种方法用上,不过设置为1 , 然后如果需要遮盖就把上面这个消失掉,这样可以避免不少计算,不过效果可能不好  发表于 2016-1-2 20:46
估计参考xp的那种把所有图块都用sprite绘制,靠z值和y值控制高下效果 会效率更低.......  发表于 2016-1-2 20:40
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
13172
在线时间
2851 小时
注册时间
2008-11-23
帖子
2577

开拓者贵宾

14
发表于 2016-1-2 22:05:08 | 只看该作者
本帖最后由 死伤殆尽 于 2016-1-2 22:06 编辑

这个插件的想法好
但是楼主你有没有发现最后一张截图里,角色和宝箱的位置,跟右边的阴影位置是矛盾的?
虽然细究起来有点问题,但软件预设墙体上方是只可以往下走进一格的
再结合角色高度啊等等问题,我觉得这些需要统合起来考虑一下
I'm the bone of my Second Grade.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
388 小时
注册时间
2009-8-4
帖子
219
15
 楼主| 发表于 2016-1-2 22:43:44 | 只看该作者
本帖最后由 andrewx 于 2016-1-2 22:54 编辑
死伤殆尽 发表于 2016-1-2 22:05
这个插件的想法好
但是楼主你有没有发现最后一张截图里,角色和宝箱的位置,跟右边的阴影位置是矛盾的?
虽 ...


我在墙壁同行插件里的算法是对于同一纵列连续墙壁自动元件,如果从上面数有n块顶部元素,那么从下面数n块不能通行。实际上正方体斜上方透视不也是这样的么,顶面宽度=底面宽度,允许行走的部分正好等于墙壁正面高度。

本身VX之后墙壁根本就不给通行,xp也只是墙壁往下一格,但我觉得不是很科学。

对于阴影...你可以认为是光线与地面135度夹角投影后偏移了,但是系统又画不出斜向的阴影什么的。说真的,自动阴影这个设计蠢爆了,又不智能又丑。你可以试着画一个顶面一格,正面多格的柱子,你会发现自动阴影还是那么愚蠢地产生一条。。。。
我都准备开插件全程屏蔽这东西。。。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
388 小时
注册时间
2009-8-4
帖子
219
16
 楼主| 发表于 2016-1-3 21:10:59 | 只看该作者
汪汪 发表于 2016-1-2 18:20
于是......针对副作用,
把高层元件做出半透明遮挡物就好了,
高层元件在显示时在人物下面,

在这个思路基础上想到可以不管tile的分层而是直接多创建一层upperLayer并添加对其的更新,这样似乎兼容性更好一点点

JAVASCRIPT 代码复制
  1. Tilemap.prototype._createLayers = function() {
  2.         var width = this._width;
  3.         var height = this._height;
  4.         var margin = this._margin;
  5.         var tileCols = Math.ceil(width / this._tileWidth) + 1;
  6.         var tileRows = Math.ceil(height / this._tileHeight) + 1;
  7.         var layerWidth = tileCols * this._tileWidth;
  8.         var layerHeight = tileRows * this._tileHeight;
  9.         this._lowerBitmap = new Bitmap(layerWidth, layerHeight);
  10.         this._upperBitmap = new Bitmap(layerWidth, layerHeight);
  11.         this._layerWidth = layerWidth;
  12.         this._layerHeight = layerHeight;
  13.  
  14.         /*
  15.          * Z coordinate:
  16.          *
  17.          * 0 : Lower tiles
  18.          * 1 : Lower characters
  19.          * 3 : Normal characters
  20.          * 4 : Upper tiles
  21.          * 5 : Upper characters
  22.          * 6 : Airship shadow
  23.          * 7 : Balloon
  24.          * 8 : Animation
  25.          * 9 : Destination
  26.          */
  27.  
  28.         this._lowerLayer = new Sprite();
  29.         this._lowerLayer.move(-margin, -margin, width, height);
  30.         this._lowerLayer.z = 0;
  31.  
  32.         this._upperLayer = new Sprite();
  33.         this._upperLayer.move(-margin, -margin, width, height);
  34.         this._upperLayer.z = 4;
  35.  
  36.         for (var i = 0; i < 4; i++) {
  37.                 this._lowerLayer.addChild(new Sprite(this._lowerBitmap));
  38.                 this._upperLayer.addChild(new Sprite(this._upperBitmap));
  39.         }
  40.  
  41.         this.addChild(this._lowerLayer);
  42.         this.addChild(this._upperLayer);
  43.  
  44.         // 更改原始upperLayer的z值为0,并添加半透明的upperLayerNew
  45.         this._upperLayer.z = 0;
  46.         this._upperLayerNew = new Sprite();
  47.         this._upperLayerNew.move(-margin, -margin, width, height);
  48.         this._upperLayerNew.z = 4;
  49.         this._upperLayerNew.opacity = 200;
  50.         for (var i = 0; i < 4; i++) {
  51.                 this._upperLayerNew.addChild(new Sprite(this._upperBitmap));
  52.         }
  53.         this.addChild(this._upperLayerNew);
  54. };
  55.  
  56. Tilemap.prototype._updateLayerPositions = function(startX, startY) {
  57.         var m = this._margin;
  58.         var ox = Math.floor(this.origin.x);
  59.         var oy = Math.floor(this.origin.y);
  60.         var x2 = (ox - m).mod(this._layerWidth);
  61.         var y2 = (oy - m).mod(this._layerHeight);
  62.         var w1 = this._layerWidth - x2;
  63.         var h1 = this._layerHeight - y2;
  64.         var w2 = this._width - w1;
  65.         var h2 = this._height - h1;
  66.  
  67.         for (var i = 0; i < 2; i++) {
  68.                 var children;
  69.                 if (i === 0) {
  70.                         children = this._lowerLayer.children;
  71.                 } else {
  72.                         children = this._upperLayer.children;
  73.                 }
  74.                 children[0].move(0, 0, w1, h1);
  75.                 children[0].setFrame(x2, y2, w1, h1);
  76.                 children[1].move(w1, 0, w2, h1);
  77.                 children[1].setFrame(0, y2, w2, h1);
  78.                 children[2].move(0, h1, w1, h2);
  79.                 children[2].setFrame(x2, 0, w1, h2);
  80.                 children[3].move(w1, h1, w2, h2);
  81.                 children[3].setFrame(0, 0, w2, h2);
  82.         }
  83.  
  84.         // 增加对upperLayerNew的更新
  85.         var children = this._upperLayerNew.children;
  86.         children[0].move(0, 0, w1, h1);
  87.         children[0].setFrame(x2, y2, w1, h1);
  88.         children[1].move(w1, 0, w2, h1);
  89.         children[1].setFrame(0, y2, w2, h1);
  90.         children[2].move(0, h1, w1, h2);
  91.         children[2].setFrame(x2, 0, w1, h2);
  92.         children[3].move(w1, h1, w2, h2);
  93.         children[3].setFrame(0, 0, w2, h2);
  94. };
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
13172
在线时间
2851 小时
注册时间
2008-11-23
帖子
2577

开拓者贵宾

17
发表于 2016-1-3 22:21:18 | 只看该作者
本帖最后由 死伤殆尽 于 2016-1-3 22:23 编辑
andrewx 发表于 2016-1-2 22:43
我在墙壁同行插件里的算法是对于同一纵列连续墙壁自动元件,如果从上面数有n块顶部元素,那么从下面数n块 ...


我知道,所以我才说只能走进去一格的系统预设细想起来是有问题的
但这个预设又是为了确保默认设置下角色在被墙壁遮盖时能至少露出一个头顶
虽然VX开始的地图编辑器功能弱化导致连一格都走不进去
但自动阴影的算法也跟着这个预设走
然后这又导致了自动阴影在很多情况下违和感十分严重
而VX系的地图图层功能又无法在没有自动阴影的情况下解决地图阴影问题
因此VX Ace开始增加了阴影笔这个功能用来修改自动生成的阴影

这样解释之后不知道你能不能理解VX系地图编辑器在这方面有多混乱
如果要针对其中一点下手的话,其他牵连到的要素也要一并解决才行
屏蔽自动阴影其实没有太大必要,毕竟这方面的问题靠阴影笔也能解决就是了……
改造自动阴影的算法又不知道可行性有多少……

顺带一提RM默认地图图块素材的光线基本上预设是从左向右直射的,不需要去考虑什么斜方向阳光

总而言之还是那句话,我不是针对MV,但VX系的地图编辑器真的都是垃圾啊!
I'm the bone of my Second Grade.
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
13172
在线时间
2851 小时
注册时间
2008-11-23
帖子
2577

开拓者贵宾

18
发表于 2016-1-3 22:28:28 | 只看该作者
其实细究起来第一张截图的房子阴影也有问题,然后角色应该也不止能走进去一格……
以前用XP画地图时碰到这种地方的处理我一般都被迫抛弃常识不管多高的墙后面永远设成只能走进一格
就游戏性的角度来考虑还是能接受的……

楼主加油吧,期待你想出能解决这个问题的方法
I'm the bone of my Second Grade.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
388 小时
注册时间
2009-8-4
帖子
219
19
 楼主| 发表于 2016-1-4 10:21:37 | 只看该作者
本帖最后由 andrewx 于 2016-1-4 10:23 编辑
死伤殆尽 发表于 2016-1-3 22:28
其实细究起来第一张截图的房子阴影也有问题,然后角色应该也不止能走进去一格……
以前用XP画地图时碰到这 ...


对的,是不止一格,按理说墙壁多高就应该能往下几格,然而这默认地图就给房顶这个元件做了一格的星形通行,也是很奇怪。

如果用了半透明遮挡的话最后那张图尽管露不出头也是能看到角色位置,实际跑起来感觉还是可以的。

MV这次地图图块数据在同一格内做了六层,0是A类基础图块,1是A类装饰图快,2,3是B~E类图块叠加,4是阴影bit,5是区域id,而这个默认阴影bit又是编辑器自动算出来的,如果要改算法大概要对编辑器本身动刀了。另外自动阴影对于常用Shift画地图的简直是摧残啊Orz

我对V系地图编辑器都是垃圾这句话不能同意更多,这次所谓的六层地图数据依然被xp完爆。且不论自动原件没了解析窗口,当我发现v系自动元件精度从3*3变成了2*2,我真想骂这tm什么鬼。。。

点评

之前看到那个插件,不过好像当时还有bug,不知道现在如何了,回头研究下,实在不行用PS画多层远景图得了ORZ  发表于 2016-1-4 14:42
然后支持tiledmap的插件已经有了。  发表于 2016-1-4 13:09
可以考虑使用tiledmap这个软件,不过好像不能自动原件,目前要考虑的是对地图的格式转化……(其实.抛开mv就好。  发表于 2016-1-4 13:09
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
20
发表于 2016-1-5 20:45:57 | 只看该作者
......对mv的地图太不熟悉了,求教几个语句
   为什么这里是 -shadowBits
    lowerTiles.push(-shadowBits);

   (this._isTableTile(upperTileId1) && !this._isTableTile(tileId1))  这个什么意思,实现什么效果?

    if (this._isTableTile(upperTileId1) && !this._isTableTile(tileId1)) {
      
        if (!Tilemap.isShadowingTile(tileId0)) {   这句又是要干啥..................
            lowerTiles.push(tableEdgeVirtualId + upperTileId1);  完全看不懂这个要做啥
        }
    }
   这是啥东西.....  
  this._isOverpassPosition

(想通过sprite实现 tilemap中....)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 02:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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