Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Cocos2dx(Ver2)が闇な話
Search
ぽんこつ
June 28, 2014
Technology
0
210
Cocos2dx(Ver2)が闇な話
Cocos2dx(Ver2)が如何に闇かCCArrayというCocos2dx(Ver2)の闇の凝縮体の解説を元に暴く
ぽんこつ
June 28, 2014
Tweet
Share
More Decks by ぽんこつ
See All by ぽんこつ
艦これHacking
ponkotuy
0
3.8k
Other Decks in Technology
See All in Technology
それでも私が品質保証プロセスを作り続ける理由 #テストラジオ / Why I still continue to create QA process
pineapplecandy
0
170
MCP ✖️ Apps SDKを触ってみた
hisuzuya
0
300
[VPoE Global Summit] サービスレベル目標による信頼性への投資最適化
satos
0
220
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
14k
「REALITY」3Dアバターシステムの7年分の拡張の歴史について
gree_tech
PRO
0
130
JSConf JPのwebsiteをGatsbyからNext.jsに移行した話 - Next.jsの多言語静的サイトと課題
leko
2
180
初めてのDatabricks Apps開発
taka_aki
1
240
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.8k
「最速」で Gemini CLI を使いこなそう! 〜Cloud Shell/Cloud Run の活用〜 / The Fastest Way to Master the Gemini CLI — with Cloud Shell and Cloud Run
aoto
PRO
1
150
Okta Identity Governanceで実現する最小権限の原則 / Implementing the Principle of Least Privilege with Okta Identity Governance
tatsumin39
0
160
「タコピーの原罪」から学ぶ間違った”支援” / the bad support of Takopii
piyonakajima
0
130
Railsの話をしよう
yahonda
0
170
Featured
See All Featured
For a Future-Friendly Web
brad_frost
180
10k
Building an army of robots
kneath
305
46k
Mobile First: as difficult as doing things right
swwweet
225
10k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Building Adaptive Systems
keathley
44
2.8k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
190
55k
Gamification - CAS2011
davidbonilla
81
5.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Faster Mobile Websites
deanohume
310
31k
Transcript
͡Ίʹ Cocos2dx ͱ CCArray ݁ Cocos2dx(Ver2) ͕ҋͳ ΆΜͭ͜ 2014
06 ݄ 28 ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ ࣗݾհ ΆΜͭ͜Ͱ͢ (@ponkotuy) ܳऀ౦ژΤϯλʔςΠϝϯτͰήʔϜ࡞ͬͯ·͢ C++͡Όͳͯ͘
Scala ͷਓͰ͢ ΏͱΓϓϩάϥϚʹ C++ͱϝϞϦཧແཧա͗ͨ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ ͢༰ Cocos2dx(Ver2) ͕ਏ͍Λ͠·͢ C++03 Ҏલͷ
No Constexpr, No Template ·ͱͳ C++ͷΛظ͍ͯ͠Δํٳܜ࣌ؒͰ͢ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ ιγϟή։ൃͷݱ Wanted ϦονͳεϚʔτϑΥϯΞϓϦ (ωΠςΟϒ) Required
ϚϧνϓϥοτϑΥʔϜ (ಛʹ iOS + Android) Must σβΠφʔͱͷ࿈ܞ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ Cocos2dx ͳΒͰ͖ΔΑʂ ϚϧνϓϥοτϑΥʔϜͳωΠςΟϒΞϓϦ͕࡞Մೳ CocosBuilder Λͬͯը໘ɾΞχϝʔγϣϯ࡞
C++Ͱ Obj-C ΑΓϦονͳϓϩάϥϛϯάڥ ຊʹ Obj-C ΑΓϦον͔ʁ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ Cocos2dx ͷݱ࣮ Cocos2dx Objective-C
൛ Cocos2d ͷ C++Ҡ২ ݁ͱͯ͠։ൃऀ͕ C++͔ͬͯͳ͍ ࣮ମྼԽ Objective-C ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ Cocos2dx(Ver2) ͷCCArray Cocos2dx ͷ CCArray
class Objective-C Ͱ NSArray ΑΓߴͱͯ͠༻Λਪ زΒ͔ͷඪ४ͷϝιου͕ CCArray Λฦͯ͘͠Δ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ CCArray ͷAPI Create static CCArray*
create(); Insert void addObject(CCObject* object); CCObject ͱ͔͍͏Կ͔͓ͧ·͍͠ͷ͕ ཁૉ CCObject ͷܧঝ͕Ϛετ CCObject Java ͷશͯͷجఈΫϥε Object Έ͍ͨͳ Cocos2dx ͷΫϥεຆͲશͯ CCObject Λܧঝ͍ͯ͠Δ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ CCArray ͷAPI ͦͷ2 ϧʔϓͷճ͠ํ CCARRAY_FOREACH(ccArray,
obj) { CCNode* node = static_cast<CCNode*>(obj); ... } CCARRAY_FOREACH ͱ͍͏ಾϚΫϩ Ұ୴ CCObject ʹม͞ΕΔͷͰϒνյ͞ΕΔܕใ ͪͳΈʹ iterator ࣮͞Εͯͳ͍ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ CCArray ͱstd::vector ͷൺֱ std::vector ͱҎԼͷૢ࡞Ͱൺֱ͢Δ
oat ܕͰ 0 ͔Β n ·ͰίϯςφʹಥͬࠐΉ ˢΛͯ͠߹ܭΛग़͢ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ std::vectorʢC++03ʣͷ߹ float stdVectorSum(float count) {
std::vector<float> vec; for(float f = 0.0f; f < count; ++f) vec.push_back(f); return std::accumulate( vec.begin(), vec.end(), 0.0f); } ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ CCArray ͷ߹ float ccArraySum(float count)
{ CCArray* array = CCArray::create(); for(float f = 0.0f; f < count; ++f) array->addObject(new CCFloat(f)); float sum = 0.0f; CCObject* elem = NULL; CCARRAY_FOREACH(array, elem) { CCFloat* f = static_cast<CCFloat*>(elem); sum += f->getValue(); } return sum; } ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ CCArray ͷͭΒ͍ͱ͜Ζ CCFloat ͱ͍͏ CCObject
Λܧঝͨ͠ class ͕ඞཁ STL ͷΞϧΰϦζϜ͕͑ͳ͍ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ ൺֱ CPU Core i5-4570S 2.90GHz
OS Ubuntu 14.04 CXX g++4.8.2 CXXFLAGS -O3 Ͱ 10000000 ສཁૉɺઌఔͷίʔυΛճͨ݁͠Ռ͕ CCArray 0.569s std::vector<oat> 0.057s std::vector<CCFloat> 0.397s ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ ݁ CCArray 0.569s std::vector<oat> 0.057s
std::vector<CCFloat> 0.397s CCArray ͷ͍ͷ CCFloat ͷ boxingɺunboxing ͕ݪҼ ͨͩ͠ std::vector<CCFloat>Ͱ CCArray ͷํ͕͍ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ ͪͳΈʹ array->addObject(new CCFloat(f)); ͜ΕϦʔΫͯ͠·ͤΜɻ CCObject
ࢀরΧϯτํࣜͷࣗಈղ์Λ࣋ͭ addObject Ͱ retain Λൃߦ (ࢀরΧϯτ͕+1 removeObject Ͱ release Λൃߦ (ࢀরΧϯτ͕-1 ͞ΕΔҝͰ͢ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ ݁ ॳظͷεϚϗήʔϜ։ൃͰڧྗͩͬͨ Cocos2dx Cocos2dx(Ver2) ͷશମతʹ
CCArray Ϩϕϧͷ೦ઃܭ boxingɺunboxing ͜Θ͍ɺ͍ ·ͣͪΌΜͱ STL ͓͏ Unity(C#) ͔ Cocos2dx(Ver3) ͍͍ͨ ΆΜͭ͜ Cocos2dx(Ver2) ͕ҋͳ
͡Ίʹ Cocos2dx ͱ CCArray ݁ ͦͷଞ ܭଌʹͬͨίʔυ https://github.com/ponkotuy/CocosSample ΆΜͭ͜ Cocos2dx(Ver2)
͕ҋͳ