找回密码
 点一下
查看: 947|回复: 12

【求助】关于-对话框-被点击没有反应的问题...ReturnBug GameCache

[复制链接]
发表于 2011-9-26 21:44:12 | 显示全部楼层 |阅读模式
我点ESC后弹出了对话框和按钮,但是点击按钮后没有反应,不知道是哪里错了.
[jass]
function H2I takes handle h returns integer
return h
return 0
endfunction
function I2Dia takes integer i returns dialog
return i
return null
endfunction
function I2But takes integer i returns button
return i
return null
endfunction
[/jass]

触发A的代码
[jass]
function A_Act takes nothing returns nothing
  local dialog Dia = DialogCreate()
  local button Dia1
    call DialogSetMessage(Dia, "AAAAAAA" )
    set Dia1 = DialogAddButton(Dia, "确定 (Z)", 'Z' )
    call DialogAddButton(Dia, "取消 (X)", 'X' )
    call DialogDisplay( GetTriggerPlayer(),Dia, true )
    call StoreInteger(udg_PV,"Z", "Dia", H2I(Dia) )
    call StoreInteger(udg_PV,"Z", "Dia1", H2I(Dia1) )
endfunction

function InitTrig_A takes nothing returns nothing
  local trigger A = CreateTrigger()
#include <YDTrigger/TriggerRegisterAnyPlayerEvent.h>
  call TriggerRegisterPlayerEventEndCinematic( A, YDWEGetAllPlayer() )
#include <YDTrigger/TriggerRegisterAnyPlayerEvent.h>
  call TriggerAddAction(A, function A_Act)
endfunction
[/jass]

触发B的代码
[jass]
function B_Act takes nothing returns nothing
  if (GetClickedButton() == I2But(GetStoredInteger(udg_PV,"Z", "Dia1" ))) then
    call DisplayTimedTextToPlayer( GetLocalPlayer(),0,0,8,"Diaaaaaa" )
  endif
endfunction

function InitTrig_B takes nothing returns nothing
  local trigger LD_UP = CreateTrigger()
  call TriggerRegisterDialogEvent( LD_UP, I2Dia(GetStoredInteger(udg_PV,"Z", "Dia" ) ) )
  call TriggerAddAction(LD_UP, function B_Act)
endfunction

[/jass]
发表于 2011-9-27 04:38:05 | 显示全部楼层
在你图里的A_Act里加了两个动作:
[jass]call BJDebugMsg( I2S(GetStoredInteger( udg_PV, "z", "Dia")) )
call BJDebugMsg( I2S( H2I(Dia) ) )[/jass]
下图是运行后得到的结果:
QQ截图未命名.png
由此可见其实句柄地址没有被存入缓存……
不过我对缓存了解不多……不知道缓存是不是原本就这样。。不过应该跟哈希表类似吧。。
   

顺便提两个建议:
1. InitTrig里既然是用局部变量创建的触发器,那么在函数尾端应该set null,这个属于排泄问题~
2. 现在玩1.24以下版本的人几乎没有了吧……推荐LZ抛弃RBGC改用HT~
回复

使用道具 举报

发表于 2011-9-27 07:12:37 | 显示全部楼层
--那是,。不过1.20的人也很多撒。。-
不过就用了一次-HT -就感觉比  GC + RB 好用多了.
--and 一般都会被存入吧。。是不是搞错了。。
还有。是不是 GETLOCALPLAYER 错了-。。不然 不会连个0都不会出现吧 --(LZ说的无反应。。)
回复

使用道具 举报

发表于 2011-9-27 07:18:22 | 显示全部楼层
jinshifen33:--那是,。不过1.20的人也很多撒。。-
不过就用了一次-HT -就感觉比  GC + RB 好用多了.
--and 一般都会被存入吧。。是不是搞错了。。
还有。是不是 GETLOCALPLAYER 错了-。。不然 不会连个0都不会出现吧 --(LZ说的无反应。。)

....... (2011-09-27 07:12)
LS想错了。。如果没有存入的话,那么B触发器不会被触发……因为没有对话框被点击。。
至于LocalPlayer我倒觉得没什么问题。。一开始我也觉得问题是这个,然后试了下没试出问题来。。
PS:HT效率比GC高~
回复

使用道具 举报

发表于 2011-9-27 07:43:18 | 显示全部楼层
InitTrig_B执行的时候那些只有没有被缓存呢?如果不是后来动态注册的话,触发初始化的时间是地图初始化前,这些只是不会存在的,这个触发也就不可能被执行
回复

使用道具 举报

发表于 2011-9-27 08:14:58 | 显示全部楼层
zhuzeitou:InitTrig_B执行的时候那些只有没有被缓存呢?如果不是后来动态注册的话,触发初始化的时间是地图初始化前,这些只是不会存在的,这个触发也就不可能被执行 (2011-09-27 07:43)
猪头打错字了…………
只→值
我看了好半天才看懂原句。。。

然后我发现看懂了原句也不知道猪头说的意思。。。
回复

使用道具 举报

发表于 2011-9-27 09:24:58 | 显示全部楼层
嗯,好像是打错了,懒得再改了………………

就像拿变量对话框去注册事件,变量的值后来再怎么改,事件响应的也只是注册时变量的值所表示的对话框,这个也是一样的
回复

使用道具 举报

发表于 2011-9-27 09:44:59 | 显示全部楼层
给猪头大大发卡~

我第一次遇到这个逻辑。。。
回复

使用道具 举报

 楼主| 发表于 2011-9-27 10:14:05 | 显示全部楼层

回 1楼(chyj4747) 的帖子

谢谢你的建议!!
不过我在A_Act 里加两个动作
    [jass]call DisplayTimedTextToPlayer( GetLocalPlayer(),0,0,8,I2S(GetStoredInteger(udg_PV,"Z", "Dia" )) )
        call DisplayTimedTextToPlayer( GetLocalPlayer(),0,0,8,I2S(GetStoredInteger(udg_PV,"Z", "Dia1" )) )[/jass]
下图是运行后得到的结果:
QQ截图20110927100822.jpg

奇怪了, 我这里测试怎么保存进去了啊?
   
A_Act  里的代码如下
[jass]
function A_Act takes nothing returns nothing
    local dialog Dia = DialogCreate()
    local button Dia1
        
        call DialogSetMessage(Dia, "AAAAAAA" )
        set Dia1 = DialogAddButton(Dia, "确定 (Z)", 'Z' )
        call DialogAddButton(Dia, "取消 (X)", 'X' )
        call DialogDisplay( GetTriggerPlayer(),Dia, true )
        
        call StoreInteger(udg_PV,"Z", "Dia", H2I(Dia) )
        call StoreInteger(udg_PV,"Z", "Dia1", H2I(Dia1) )
        
        call DisplayTimedTextToPlayer( GetLocalPlayer(),0,0,8,I2S(GetStoredInteger(udg_PV,"Z", "Dia" )) )
        call DisplayTimedTextToPlayer( GetLocalPlayer(),0,0,8,I2S(GetStoredInteger(udg_PV,"Z", "Dia1" )) )
endfunction
[/jass]
回复

使用道具 举报

 楼主| 发表于 2011-9-27 10:36:13 | 显示全部楼层

回 6楼(zhuzeitou) 的帖子

是啊,,最开始我也是这么怀疑的,
但是后来想,我用全局变量明明可以的.
全局变量申明的时候也是没有赋值的,
是在创建对话框的时候给赋值的,
但为什么全局变量可以,CaChe 就不行啊, 奇怪了.
现在听你这么一说好像真的是这样的啊..
有没有什么方法可以解决啊,
回复

使用道具 举报

发表于 2011-9-27 12:56:48 | 显示全部楼层
超级无敌拖拉机:是啊,,最开始我也是这么怀疑的,
但是后来想,我用全局变量明明可以的.
全局变量申明的时候也是没有赋值的,
是在创建对话框的时候给赋值的,
但为什么全局变量可以,CaChe 就不行啊, 奇怪了.
....... (2011-09-27 10:36)
动态注册,在A里给B注册事件~
当然还要防止重复注册~
如果这个触发只用一次的话记得去掉动作后删除~
回复

使用道具 举报

 楼主| 发表于 2011-9-27 13:10:33 | 显示全部楼层

回 10楼(chyj4747) 的帖子

chyj4747:动态注册,在A里给B注册事件~
当然还要防止重复注册~
如果这个触发只用一次的话记得去掉动作后删除~
(2011-09-27 12:56)
不行啊.上午的时候我试了.还是没有用.不知道是什么问题..
我再看看吧......
回复

使用道具 举报

 楼主| 发表于 2011-9-27 13:19:16 | 显示全部楼层

回 10楼(chyj4747) 的帖子

chyj4747:动态注册,在A里给B注册事件~
当然还要防止重复注册~
如果这个触发只用一次的话记得去掉动作后删除~
(2011-09-27 12:56)
真的可以了....真的解决了....
但是奇怪...我上午试的时候怎么不行.
我知道了..
开始我是新建一个触发.在游戏开始5秒后给B注册事件....肯定是注册事件的时候对话框还没有存入缓存...
非常感谢各位的帮助..
谢谢了....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-24 05:56 , Processed in 0.034303 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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