Cocos + Luaは、既存のコンポーネント属性メソッドの拡張を実現します
目次
1.ブログ紹介
私は最近、cocos + luaを使用して物事を書いています。以前はほとんどluaを使用していませんでした。プロジェクトでいくつかの書き込み方法を見つけて、それが良いと思いました。ここで共有してください。この記事のアイデアは、 Unity。これらはすべて既存のコンポーネントのプロパティとメソッドを拡張しています。Unityの静的拡張と比較して、このluaの拡張はよりオープンである必要があります。
2.コンテンツ
(1)考える
最初にアイデアについてお話ししましょう。理由は非常に単純です。luaのテーブルには非常に幅広い機能があります。プロパティとメソッドをテーブルに任意に追加できます。Cocosのコンポーネント(ラベル、ボタンなど)の場合。、メソッドとプロパティはすべてカプセル化されています。展開する場合は、新しいテーブルを作成し、必要な属性とメソッドをこのテーブルに追加してから、このテーブルのすべての情報をラベルまたはボタンに割り当てることができます。対応する拡張操作を実現するには、操作する必要があります
(2)実際の操作
ここでは、特定の小さな例を用意します。ゲームのラベル表示でいくつかの操作を行うことがよくあります。たとえば、1から100への数値の変化を表示するには、特定のラベルが必要です。このとき、タイマーまたはコールバックまたは書き込み1つのアクションで操作全体を完了するために、拡張メソッドを使用して、数を増やす操作をカプセル化します。これは、将来の再利用に便利です。
まず、テーブルを作成し、テーブルメソッドでデジタル成長のロジックを実装します。
--拓展所用的表
addFunc = {}
addFunc.updateNum = 0
--增长数字的方法 startNum:起始数字 targetNum:终点数字 durTime:时间 interal:每次变化间隔
function addFunc:updateLabelByNum(startNum,targetNum,durTime,interal)
addFunc.updateNum = startNum
--变化的总量
local total = targetNum - startNum
--变化的次数
local changeNum = durTime/interal
--单次变化的量
local singleNum = total/changeNum
self:runAction(cc.RepeatForever:create(cc.Sequence:create(cc.DelayTime:create(interal), cc.CallFunc:create(function()
addFunc.updateNum = addFunc.updateNum + singleNum
self:strString(tostring(self.updateNum))
if addFunc.updateNum>= targetNum then
self:strString(tostring(targetNum))
self:stopAllActions()
end
end))))
end
次に、割り当てメソッドを実装します。
function inherit( sub, base )
for k,v in pairs(base) do
if sub[k] == nil then
sub[k] = v
end
end
return sub
end
最後に、Labelコンポーネントを使用すると、次のように記述した拡張メソッドを継承します。
inherit(theLabel, addFunc)
数を増やす必要がある場合は、拡張メソッドを直接呼び出すことができます。
--Label从1变化到100,历经5秒,每次变化间隔1/20秒
theLabel:updateLabelByNum(1,100,5,1/20)
3.プッシュ
Github:https://github.com/KingSun5
4.結論
ブロガーの記事がよく書かれていると思われる場合は、ブロガーに注意を払い、ブログ投稿を気に入ってください。また、ブロガーの能力は限られています。記事に誤りがある場合は、コメントして批判してください。 。
QQ交換グループ:806091680(中国人)
このグループは、CSDNブロガーのChinarによって作成されました。お勧めします。私もグループにいます!