找回密码
 点一下
楼主: 画中人

没办法,只好到水区发贴请教了。

  [复制链接]
发表于 2007-6-29 22:48:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2007-6-30 05:09:16 | 显示全部楼层
我想到的方法不会出现对数组进行搜索的,可以一次性找到指定位置。
只是我正在考试中,现在没写完。
回复

使用道具 举报

发表于 2007-6-30 23:07:21 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2007-7-1 04:25:19 | 显示全部楼层
哈哈,有结果了。。。。
未命名.JPG
回复

使用道具 举报

 楼主| 发表于 2007-7-1 10:09:11 | 显示全部楼层
对Timer的想法现在是在开始就生成足够用的Timer,把不用的放在一个“回收站”里,用的时候再取出来,这样保证一个地图只使用有限的Timer。
回收站的容量是地图上最多可能同时运行的Timer数量。

利用连续成生的Handle类型变量的H2I转换得到的整数的连续性,得到这种整数与第一个得到的整数之差做为数组下标。
回复

使用道具 举报

发表于 2007-7-1 10:38:29 | 显示全部楼层
555...摸一下,拜一下~
回复

使用道具 举报

发表于 2007-7-1 11:51:15 | 显示全部楼层
虽然可以用“足够”多的timer。
但是这个足够又是多少呢?
而且不一定是timer。其它的一些东西也需要关联的。比如单位和单位之间。
虽然用这样的方法是有一定的可行性。但是通用性毕竟不高。
回复

使用道具 举报

发表于 2007-7-1 12:06:01 | 显示全部楼层
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜拜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜拜拜拜拜拜拜拜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜拜拜
拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜拜拜
拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜拜拜拜拜拜膜膜膜膜拜拜拜拜拜拜拜
拜拜拜拜拜拜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜膜膜拜拜拜膜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜拜拜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜
拜拜拜拜拜膜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜膜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜拜拜拜拜拜拜
拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜膜拜拜拜拜拜
拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜
拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜
拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜
拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜
拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜
拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜
拜拜拜拜拜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜膜拜拜拜拜拜膜膜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜膜膜拜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜膜膜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜膜膜膜膜膜膜膜拜拜拜
拜拜拜拜拜膜膜拜拜拜拜膜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜
拜拜拜拜拜膜膜膜膜膜膜膜膜膜膜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜拜拜膜膜膜膜拜拜拜
拜拜拜拜拜拜拜膜膜膜膜膜膜膜拜拜拜拜膜膜膜膜膜膜膜膜膜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜
拜拜拜拜拜拜拜拜膜膜膜膜膜拜拜拜拜拜膜膜膜膜膜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜
拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜拜拜拜拜膜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜膜膜拜拜拜
拜拜拜拜拜拜拜拜拜膜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜膜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜
拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜拜
回复

使用道具 举报

 楼主| 发表于 2007-7-1 16:45:54 | 显示全部楼层
引用第26楼amp34于2007-07-01 11:51发表的  :
虽然可以用“足够”多的timer。
但是这个足够又是多少呢?
而且不一定是timer。其它的一些东西也需要关联的。比如单位和单位之间。
虽然用这样的方法是有一定的可行性。但是通用性毕竟不高。

大部分都想好了。只是3个无法传参的函数郁闷,一个是timerStart,一个是触发的事件,一个就是执行函数。

有兴趣的一起研究一下吧。
注明:地图使用VJass。
回复

使用道具 举报

发表于 2007-7-1 17:34:03 | 显示全部楼层
=。=
this是啥?

另外。用一个int索引保存数组当前使用位置的问题。。
我是这样想的。
如果保存了100个。我从中间读取了50个话。索引要不要减小到50?然后把数组中的内容收缩?

MS偶完全米看到收缩啊。只看到鸟减小索引。
回复

使用道具 举报

 楼主| 发表于 2007-7-1 17:48:49 | 显示全部楼层
是这样的,比如有一个Timer数组A,容量8000,这是全地图中所有的Timer


又有一个integer数组B,容量也是8000,这是当前没有使用的Timer
开始的时候,给数组A的每一个位置都分配一个Tiemr,数组B的第index位的值是index。
表示着数组这里面有8000个可用Timer,也就是所有Timer都没有使用。
数组B就像一个栈一样工做,下面用栈表示

当启动一个Timer时,从在栈里弹出一个整数,这个整数指向数组A的索引,于是在A中得到一个Timer, 使用之。这个Timer使用完,Pause这个Timer,
再把这个Timer转成一个整数,压入栈中。
回复

使用道具 举报

发表于 2007-7-1 17:58:08 | 显示全部楼层
呜。好厉奇的说。
果然还素建立在足够的基础之上啊。
不过虽然如此。但是会增加初始化的时间的说。
回复

使用道具 举报

 楼主| 发表于 2007-7-1 23:52:28 | 显示全部楼层
我试过初始化8000个Timer,发现不影响游戏进度。
仅仅是Create,并没有运行。
所以,我还是认为这种方法有前途的。
注:上面的地图仅供参考,并不完善。
回复

使用道具 举报

发表于 2007-7-1 23:55:46 | 显示全部楼层
楼主加油哦~
回复

使用道具 举报

 楼主| 发表于 2007-7-2 00:30:55 | 显示全部楼层
我上面说的是错的。
全地图Timer最多可以产生3978个。到不了8000.
但产生的速度非常快,不到0.01秒全部生成,不影响游戏。
回复

使用道具 举报

 楼主| 发表于 2007-7-2 07:05:41 | 显示全部楼层
代码太长,我就发上使用方法吧。

=========================================================================================
[codes=jass]
function echo takes nothing returns nothing
    local TimerData      td
    local UnitData       ud
    set   td=TimerData.GetExpired()
    if(td.GetUnit(0)==null) then
          call   td.Destroy()
          return
    endif
    set   ud=UnitData.GetData(td.GetUnit(0))
   
    if  ( R2I(GetUnitX(ud.data))==ud.GetInteger(0)  and  R2I(GetUnitY(ud.data))==ud.GetInteger(1)  ) then
          call UnitMessage(ud.data,"stop")
          call td.Destroy()
          call ud.Destroy()
          return
    endif
    call  ud.SetInteger(0,R2I(GetUnitX(ud.data)))
    call  ud.SetInteger(1,R2I(GetUnitY(ud.data)))
   
    call  UnitMessage(td.GetUnit(0),"|cffff0000X: |r"+I2S(ud.GetInteger(0))+"|cffff0000Y: |r"+I2S(ud.GetInteger(1)))
endfunction

function Trig_echo_unit_Actions takes nothing returns nothing
    local unit       u=     GetTriggerUnit()
    local UnitData   ud=    UnitData.GetData(u)
    local TimerData td
   
   //己经在运行中,反回
    if(ud.GetBoolean(0)==true) then
           call   ud.SetBoolean(0,true)
//           return
    endif
    call   UnitMessage(u,"select")
    set    td=TimerData.Run(1.0,true,function echo)
    call   td.SetUnit(0,u)
    call   ud.SetBoolean(0,true)
endfunction

//===========================================================================
function InitTrig_echo_unit takes nothing returns nothing
    set gg_trg_echo_unit = CreateTrigger(  )
    call TriggerRegisterPlayerSelectionEventBJ( gg_trg_echo_unit, Player(0), true )
    call TriggerAddAction( gg_trg_echo_unit, function Trig_echo_unit_Actions )
endfunction
[/codes]
上面的代码就可以在玩家选择一个单位时,开始每一秒在这个单位头上显示一次坐标,
如果这个单位停止移动,那么,这个过程也停止,并显示:Stoped!







引用的函数:
[codes=jass]
function FadingTextTag takes string text, real x, real y  returns nothing
    local texttag t = CreateTextTag()
    call SetTextTagText(t, text, 0.02)
    call SetTextTagPos(t, x, y, 0.00)
    call SetTextTagVelocity(t, 0, 0.03)
    call SetTextTagVisibility(t, true)
    call SetTextTagFadepoint(t, 2)
    call SetTextTagLifespan(t, 3)
    call SetTextTagPermanent(t, false)
    set t = null
endfunction
function UnitMessage takes unit u,string text returns nothing
    local integer    length=StringLength(text)
    call  FadingTextTag(text,GetUnitX(u)-length*2,GetUnitY(u)+100)
endfunction
[/codes]
回复

使用道具 举报

 楼主| 发表于 2007-7-2 07:10:56 | 显示全部楼层
上面的地图我作了部分修改,嗯。。。。。
还在继续添加功能中,目标是取代缓存。
未命名.JPG
回复

使用道具 举报

发表于 2007-7-2 08:43:38 | 显示全部楼层
555
技术帖留名....
回复

使用道具 举报

发表于 2007-7-2 09:57:31 | 显示全部楼层
缓存的堆积是不影响游戏运行的,并且只要不使用大量的"+"运算,string泄漏是很有限的,而且string也不是存在共用内存区的,只影响到对string的操作

个人觉得,适当使用数组来代替缓存是必要的,但如果付出代价比缓存本身还要大的话,那就是没有意义的工作了
回复

使用道具 举报

发表于 2007-7-2 10:57:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 09:02 , Processed in 0.164693 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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