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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ぽんこつ
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 Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
1
180
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
こんなところでも(地味に)活躍するImage Modeさんを知ってるかい?- Image Mode for OpenShift -
tsukaman
1
170
コンテナセキュリティの最新事情 ~ 2026年版 ~
kyohmizu
5
1k
10Xにおける品質保証活動の全体像と改善 #no_more_wait_for_test
nihonbuson
PRO
2
330
小さく始めるBCP ― 多プロダクト環境で始める最初の一歩
kekke_n
1
550
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
750
AI駆動開発を事業のコアに置く
tasukuonizawa
1
360
SchooでVue.js/Nuxtを技術選定している理由
yamanoku
3
180
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
Agile Leadership Summit Keynote 2026
m_seki
1
670
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
180
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
760
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
54
A Soul's Torment
seathinner
5
2.3k
The Invisible Side of Design
smashingmag
302
51k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
350
What does AI have to do with Human Rights?
axbom
PRO
0
2k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.6k
How to train your dragon (web standard)
notwaldorf
97
6.5k
Abbi's Birthday
coloredviolet
1
4.8k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
140
AI: The stuff that nobody shows you
jnunemaker
PRO
2
270
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)
͕ҋͳ