发新话题
打印

[原创演示] 水变色函数 效果还可以

水变色函数 效果还可以

四个全局变量udg_Integer_WaterRed udg_Integer_WaterGreen udg_Integer_WaterBlue udg_Boolean_WaterColorStop
call WaterColorStart() 开始变色
call WaterColorStop()变色结束
[jass]//udg_Integer_WaterRed udg_Integer_WaterGreen udg_Integer_WaterBlue udg_Boolean_WaterColorStop
function WaterColorTimer takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer X = LoadInteger(t,"X")
if(X < 52) then
set udg_Integer_WaterRed = 255
set udg_Integer_WaterGreen = udg_Integer_WaterGreen + 5
set udg_Integer_WaterBlue = 0
else
if(X < 103) then
set udg_Integer_WaterRed = udg_Integer_WaterRed - 5
set udg_Integer_WaterGreen = 255
set udg_Integer_WaterBlue = 0
else
if(X < 154) then
set udg_Integer_WaterRed = 0
set udg_Integer_WaterGreen = 255
set udg_Integer_WaterBlue = udg_Integer_WaterBlue + 5
else
if(X < 205) then
set udg_Integer_WaterRed = 0
set udg_Integer_WaterGreen = udg_Integer_WaterGreen - 5
set udg_Integer_WaterBlue = 255
else
if(X < 256) then
set udg_Integer_WaterRed = udg_Integer_WaterRed + 5
set udg_Integer_WaterGreen = 0
set udg_Integer_WaterBlue = 255
else
if(X < 307) then
set udg_Integer_WaterRed = 255
set udg_Integer_WaterGreen = 0
set udg_Integer_WaterBlue = udg_Integer_WaterBlue - 5
else
set X = 0
endif
endif
endif
endif
endif
endif
if(udg_Boolean_WaterColorStop == true) then
call SetWaterBaseColor(udg_Integer_WaterRed,udg_Integer_WaterGreen,udg_Integer_WaterBlue,255)
else
call SetWaterBaseColor(255,255,255,255)
call KillTimer(t)
endif
call SaveInteger(t,"X",X + 1)
set t = null
endfunction
function WaterColorStart takes nothing returns nothing
local timer t = CreateTimer()
set udg_Boolean_WaterColorStop = true
set udg_Integer_WaterRed = 255
set udg_Integer_WaterGreen = 0
set udg_Integer_WaterBlue = 0
call SaveInteger(t,"X",0)
call TimerStart(t,.01,true,function WaterColorTimer)
set t = null
endfunction
function WaterColorStop takes nothing returns nothing
set udg_Boolean_WaterColorStop = false
endfunction[/jass]
本帖最近评分记录
  • aeris 威望 +1 原创内容 2008-8-15 01:18
  • aeris 金钱 +20 原创内容 2008-8-15 01:18

TOP

补充一下 KillTimer (t)是
[jass]function KillTimer takes timer t returns nothing
call PauseTimer(t)
call DestroyTimer(t)
endfunction[/jass]
然后[jass]function SaveInteger takes handle WantToSave,string SaveName,integer SaveData returns nothing
call StoreInteger(udg_GameCache_GC,I2S(H2I(WantToSave)),SaveName,SaveData)
endfunction
function LoadInteger takes handle WantToLoad,string LoadName returns integer
return GetStoredInteger(udg_GameCache_GC,I2S(H2I(WantToLoad)),LoadName)
endfunction[/jass]

[ 本帖最后由 Cream_Charlotte 于 2008-8-12 23:15 编辑 ]

TOP

给出图好了

附件

Water.w3x (16.29 KB)

2008-8-12 23:35, 下载次数: 12

TOP

既然用了全局变量,X用缓存貌似没什么意思

其实RGB都是通过X计算出来,就没必要把它们都用全局记下来了

有elseif这个关键字,不用这么深的条件语句

TOP

有道理 我重新写个去

TOP

减掉3个全局 Water.w3x (16.2 KB)
[jass]
function H2I takes handle H returns integer
    return H
    return 0
endfunction
function SaveInteger takes handle WantToSave,string SaveName,integer SaveData returns nothing
    call StoreInteger(udg_GameCache_GC,I2S(H2I(WantToSave)),SaveName,SaveData)
endfunction
function LoadInteger takes handle WantToLoad,string LoadName returns integer
    return GetStoredInteger(udg_GameCache_GC,I2S(H2I(WantToLoad)),LoadName)
endfunction
function KillTimer takes timer t returns nothing
    call PauseTimer(t)
    call DestroyTimer(t)
endfunction
function WaterColorTimer takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer X = LoadInteger(t,"X")
    local integer R
    local integer G
    local integer B
    local string S
    if(X < 52) then
        set R = 255
        set G = (X - 1) * 5
        set B = 0
    else
        if(X < 103) then
            set R = 515 - X * 5
            set G = 255
            set B = 0
        else
            if(X < 154) then
                set R = 0
                set G = 255
                set B = (X - 103) * 5
            else
                if(X < 205) then
                    set R = 0
                    set G = 1025 - X * 5
                    set B = 255
                else
                    if(X < 256) then
                        set R = (X - 205) * 5
                        set G = 0
                        set B = 255
                    else
                        if(X < 307) then
                            set R = 255
                            set G = 0
                            set B = 1535 - X * 5
                        else
                            set X = 0
                        endif
                    endif
                endif
            endif
        endif
    endif
    call SaveInteger(t,"X",X + 1)   
    if(udg_Boolean_WaterColorStop == true) then
        call DisplayTextToPlayer(GetLocalPlayer(),0,0,"X RGB")
        call SetWaterBaseColor(R,G,B,255)
    else
        call DisplayTextToPlayer(GetLocalPlayer(),0,0,"End")
        call SetWaterBaseColor(255,255,255,255)
        call FlushStoredMission(udg_GameCache_GC,I2S(H2I(t)))
        call KillTimer(t)
    endif
    set S = I2S(X)+"!"+I2S(R)+"!"+I2S(G)+"!"+I2S(B)
    call DisplayTextToPlayer(GetLocalPlayer(),0,0,S)
    set t = null
endfunction
function WaterColorStart takes nothing returns nothing
    local timer t = CreateTimer()
    set udg_Boolean_WaterColorStop = true
    call SaveInteger(t,"X",1)
    call TimerStart(t,.01,true,function WaterColorTimer)
    set t = null
endfunction
function WaterColorStop takes nothing returns nothing
    set udg_Boolean_WaterColorStop = false
endfunction
[/jass]

TOP

看不懂这写高级语言。

TOP

发新话题