赞 | 189 |
VIP | 627 |
好人卡 | 188 |
积分 | 95 |
经验 | 171230 |
最后登录 | 2024-7-3 |
在线时间 | 5073 小时 |
Lv4.逐梦者 (版主)
- 梦石
- 0
- 星屑
- 9532
- 在线时间
- 5073 小时
- 注册时间
- 2013-6-21
- 帖子
- 3580
  
|
一个一个回答问题。
首先改z坐标是不能去Game_Picture,Game_Screen里面去的,因为那根本不是Drawable模块的东西,只是为了方便而设置的数据处理类。
所以应该参考Sprite_Picture和Spriteset_Map里面的代码。
Sprite_Picture的62行是关于z坐标的更新,大小和图片编号一致。
我们可以试着修改这里,把它变得很大(例如9999),但是显示的图片依然会被窗口覆盖。显然原因不是这里。
我们知道Sprite都有显示的端口Viewport,如果端口z值不同的话,那么显示的顺序还要参见端口的z坐标。
在Spriteset_Map的17和46行,我们可以看到管理图片的活动块的Viewport的z值为200,但是Window_Message的z值是9998。在这里要注意,处于不同视口中的精灵和窗口比较先后不能只看精灵本身z坐标,还和视口Viewport的z值有关。但是Window类的对象的视口为nil,刚才经过试验,可以发现,如果不指定视口,比较z值的时候,把窗口的z值和有视口的精灵的视口的z值比,哪个大哪个就在前面显示。这也就是为什么把图片的z值调成很大依然没用,原因是图片的视口Viewport的值太小。
解决方法:把Window_Message的z值调成198或以下。或者调Spriteset_Map中的@viewport2的z值在9998以上。 |
|