THE NVL Maker

 找回密码
 注册
搜索
查看: 8374|回复: 5

[界面编辑] 按照变数更换history背景图

[复制链接]

6

主题

9

帖子

1

精华

游戏开发者

积分
14
发表于 2018-11-12 22:57:49 | 显示全部楼层 |阅读模式
本帖最后由 力殺 于 2018-11-12 22:58 编辑

最近作的游戏希望按周目数将介面背景图换掉。
自己设了一个系统变数【sf.周目】进行if判断,
具体来说一周目(sf.周目为0)时都显示A背景,其他周目(sf.周目为0以外)时都显示B背景,
在history的显示碰上瓶颈。

MyHistoryLayer.tjs 我改成这样
  1. baseImage =new global.Layer(window, this);
  2. // baseImage.loadImages(f.config_history.bgd);
  3. if(sf.周目==0)baseImage.loadImages("A背景图档名");
  4. if(sf.周目!=0)baseImage.loadImages("B背景图档名");
复制代码


问题点是下方↓
sf.周目预设为0 → 游戏一周目终了→ [eval exp="sf.周目++"] → 返回title → 进行游戏二周目,但history仍会显示A背景。

如果玩家操作为
sf.周目预设为0 → 游戏一周目终了→ [eval exp="sf.周目++"] →
 关闭游戏→ 重新开启游戏 → 进行游戏二周目, history正确显示为B背景

中间关掉游戏就可以成功更改背景图,
虽然不影响游戏体验,但还是想问问有无正确的程式写法。
回复

使用道具 举报

16

主题

989

帖子

0

精华

管理员

Rank: 9Rank: 9Rank: 9

积分
1010
发表于 2018-11-13 16:48:18 | 显示全部楼层
原因是游戏进入二周目不关闭游戏的情况下,HistoryLayer没有被重建所以保留了原来的数据。
在二周目的时候在eval操作后面直接追加一行修改现有的HistoryLayer里面的背景是可以实现即时更新的。

[iscript]
kag.historyLayer.baseImage.loadImages("图片名");
[endscript]

不过若是玩家之前从来没有打开过历史纪录可能会导致问题。因此可能应该加入判断类似:
[iscript]
if (kag.historyLayer.baseImage !== void) kag.historyLayer.baseImage.loadImages("图片名");
[endscript]
这样~

点评

啊啊!效果完美!谢谢!  发表于 2018-11-13 20:07
回复

使用道具 举报

6

主题

9

帖子

1

精华

游戏开发者

积分
14
 楼主| 发表于 2018-11-15 00:16:02 | 显示全部楼层
换成YesNoDialog要求救了,用了带透明度的版本。

MyYesNoDialog.tjs里头的
  1. var yesnoMap = %[
  2.     "返回标题吗?" => "ms_yesno_title",
  3.     "关闭游戏吗?" => "ms_yesno_exit",
  4.     "确认要保存到这里吗?" => "ms_yesno_save",
  5.     "确认要读取档案吗?" => "ms_yesno_load",
  6.     "删除档案吗?" => "ms_yesno_delete",
  7.     ];
复制代码


被我改成这样
  1. global.kag = new KAGWindow() if typeof global.kag == "undefined";
  2. var sf = kag.sflags;
  3. if(sf.周目==0)
  4. var yesnoMap = %[
  5.     "返回标题吗?" => "ms_yesno_title",
  6.     "关闭游戏吗?" => "ms_yesno_exit",
  7.     "确认要保存到这里吗?" => "ms_yesno_save",
  8.     "确认要读取档案吗?" => "ms_yesno_load",
  9.     "删除档案吗?" => "ms_yesno_delete",
  10.     ];
  11. if(sf.周目!=0)
  12. var yesnoMap = %[
  13.     "返回标题吗?" => "ms_yesno_title2",
  14.     "关闭游戏吗?" => "ms_yesno_exit2",
  15.     "确认要保存到这里吗?" => "ms_yesno_save2",
  16.     "确认要读取档案吗?" => "ms_yesno_load2",
  17.     "删除档案吗?" => "ms_yesno_delete2",
  18.     ];
复制代码


同样关闭游戏再开可以实现二周目改图的效果,但不晓得要如何实现即时更新。

点评

简单的说就是yesnoMap这个在别的地方被引用的时候采用的是创建时候的值,如果要改应该新建一个函数,每次取yesnoMap的时候都取得当时的值就好了。  发表于 2018-11-19 01:14
这个回头我直接在项目里改吧www  发表于 2018-11-18 23:31
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|nvlmaker

GMT+8, 2024-4-20 17:22 , Processed in 0.012703 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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