主题:  汉字计数器

rainy_5d

职务:普通成员
等级:2
金币:1.0
发贴:225
注册:2000/10/23 19:44:16
#12001/6/14 22:36:05
不知道诸位经常玩游戏吗?反正我以前经常玩,今天下午想起原来玩过的《三国群英传2》,那是我比较喜欢的game之一,其中的战争场景中的计数器是汉字的,挺有意思的,写了一下,与大家共享。

先制作10个bmp大小相同的小方块,在里面写上汉字:“一”,“二”...“十”,共10个,命名为“t1”,“t2”...“t10”放到stage上,然后将behavior拖到上面,我的思路是从1计数到99,所以拖3个到stage上,注意设置汉字出现的顺序。



--类似《三国群英传》中汉字数字的behavior
--CopyRight Rainy 2001.6.14


property pChineseNumMemChannel --汉字图片的cast name
property pChineseNumIndex --3个汉字member的通道序列
property pChineseNumIndexList --汉字通道及序列list
property pStartTimeYN --是否开始计时
property pTimeLong --时间间隔
property pTime --时间数
property pOffLocv,pOnLocV --sprite不可见与可见的locv

-------------------------------------------------
on getpropertydescriptionlist me
mylist=[:]
addprop mylist,#pChineseNumMemChannel,[#comment:"输入图片member Name:", \
#format:#list, \
#default:["t1","t2","t3","t4","t5","t6","t7","t8","t9","t10"]]
addprop mylist,#pChineseNumIndex,[#comment:"第几个汉字?",#format:#integer,#default:1,#range:[#min:1,#max:3]]
addprop mylist,#pTimeLong,[#comment:"时间间隔(毫秒)为:",#format:#integer,#default:2000]
return mylist
end
-------------------------------------------------
on beginsprite me
me.initialize()
end
------------------------------------------------
on initialize me
pOffLocv=-1000
pOnLocv=75
pTime=0 --初始化时间为0
pStartTimeYN=FALSE
if NOT listP(pChineseNumIndexList) then pChineseNumIndexList=[#one:0,#two:0,#three:0]
theSpriteNum=the currentSpriteNum
case pChineseNumIndex of
1:
sendAllSprites (#resive,#one,theSpriteNum)
2:
sendAllSprites (#resive,#two,theSpriteNum)
3:
sendAllSprites (#resive,#three,theSpriteNum)
end case
end
------------------------------------------------
on resive me,which,num
case which of
#one:
pChineseNumIndexList.one=num
#two:
pChineseNumIndexList.two=num
#three:
pChineseNumIndexList.three=num
end case
end
------------------------------------------------
on exitFrame me
if pStartTimeYN=FALSE then --设置标志位,确保只执行1次
pStartTimeYN=TRUE
if pChineseNumIndexList.min()<>0 then --只在全部得到属性变量的sprite中执行1次
timeout("chineseNumTime").new(pTimeLong,#changeNum,me)
end if
end if
end
------------------------------------------------
--计时器触发事件
on changeNum me
if pChineseNumIndexList.min()<>0 then
pTime=pTime+1
if pTime=99 then --超过计时范围,清除timeoutlist
timeout("chineseNumTime").forget()
me.moveChineseNum(pChineseNumIndexlist.one,pOfflocv)
me.moveChineseNum(pChineseNumIndexlist.two,pOfflocv)
me.moveChineseNum(pChineseNumIndexlist.three,pOfflocv)
end if
case pTime of
--在此处描述显示数字情况及特殊情况
1,2,3,4,5,6,7,8,9,10:
--two显示
me.displayNum(#two,pTime)
me.moveChineseNum(pChineseNumIndexlist.one,pOfflocv)
me.moveChineseNum(pChineseNumIndexlist.three,pOfflocv)
-- 11,12,13,14,15,16,17,18,19:
-- --two & three显示
-- me.displayNum(#two,10)
-- me.displayNum(#three,pTime-10)
-- me.moveChineseNum(pChineseNumIndexlist.one,pOfflocv)
20,30,40,50,60,70,80,90:
--one & three显示
me.displayNum(#one,pTime/10)
me.displayNum(#three,10)
me.moveChineseNum(pChineseNumIndexlist.two,pOfflocv)
otherwise:
--one & two & three显示
shiwei=pTime/10 --十位
gewei=pTime mod 10 --个位
me.displayNum(#one,shiwei)
me.displayNum(#two,10)
me.displayNum(#three,gewei)
end case
end if
end

------------------------------------------------
--显示数字到stage
on displayNum me,which,memNum --参数说明:(which {symbol} 哪个显示,memNum {int} 显示的member name)
case which of
#one:
mysprite=pChineseNumIndexList.one
#two:
mysprite=pChineseNumIndexList.two
#three:
mysprite=pChineseNumIndexList.three
end case
sprite(mysprite).member=pChineseNumMemChannel[memNum]
me.moveChineseNum(mysprite,pOnlocv)
end

------------------------------------------------
on moveChineseNum me,spritechannel,myloc
--移动数字sprite
sprite(spritechannel).locV=myloc
end

编辑历史:[这消息被rainy编辑过(编辑时间2001-06-14 22:38:50)]