cocos2d-x μ κ²½μ°μλ μ€νλΌμ΄νΈμ κ°μ Nodeμ μ λλ©μ΄μ μ λ§λ€μ΄μ runAction ν¨μλ‘ λ릴 μ μλλ°,
μ΄ λ runAction ν¨μμλ μΌλ° μ λλ©μ΄μ κ°μ²΄ λΏλ§ μλλΌ Callback ν¨μκΉμ§ λ£μ΄μ λ릴 μ μμ. (C++0xλΆν° μΆκ°λ λλ€λ‘λ κ°λ₯)
μ΄κ±Έλ‘ μ λλ©μ΄μ μ΄ λλλ©΄ λ νλ€λκ°, μλλ©΄ μ λλ©μ΄μ κ³Ό λμμ λ¬΄μ¨ μμ μ μ§ννκ² νλ€λκ° νλκ² κ°λ₯ν΄μ§.
κ·Όλ° λκ°μ κ²½μ°μλ λ°°ν μμ κ° μΊλ¦ν°λ§λ€μ κΈ°μ μμ λμμ΄ λ³λλ‘ μκ³ , μμ λμ€μ λ°λ―Έμ§ λ¨λκ² μ¬λ¬λ² λ¨κ² νκ³ μΆκΈ°λ νκ³ κ·ΈλΌ.
κ·Έλμ ν κΈ°μ λμλ§λ€ ν΄λμ€λ₯Ό νλμ© λ§λ€μ΄μ κ±°κΈ°μ λ§λ μ λλ©μ΄μ 'λ€μ' κ·Έλλ‘ νλμ½λ©μΌλ‘ λ°μλ£λλ€λκ° νλ건 μ‘ΈλΌ μ½λ λλΉμ΄κΈ°λ νκ³
κΈ°μ μ μΌλ‘λ μ μ λλμ§ λͺ»ν κ² κ°μμ μ΄λ²μ μ’ λλ¦ κ³ λ―Όνλ©΄μ μκ°ν΄λΈκ² μ λλ©μ΄μ μ λ΄μ Queue μ μ΄μ©νλ κ±°μμ.
μ λλ©μ΄μ λλ Callback μ΄ λ μ μλκ±Έ Queue μ λ°μλ£μ λ€μμ νΈλ¦¬κ±°λ₯Ό κ±Έμ΄μ ν μ λλ©μ΄μ μ΄ λλλ©΄
μ½λ°±μ΄λ ν¨μ νΈμΆλ‘ νλ‘ κ·Έ λ€μ μμλ₯Ό κΊΌλ΄μ μ€νν μ μλλ‘ ν λ €κ³ νμ. μ΄ λ std::function μ΄λΌλκ° std::bind μ μ΄μ©ν΄μ νλ² ν΄λ΄€λλ°,
κ·Όλ° λ€λ₯Έ κ°μ²΄μμ μ λλ©μ΄μ μ΄ λλ λ€μ λ€λ₯Έ κ°μ²΄μ μ μ₯ν μ½λ°±μ νΈμΆν΄μ νμ λ§μ§λ§ μμΉμ λ°μΈλ© λμ΄μλ μ½λ°± ν¨μλ₯Ό νΈμΆν λ €κ³ νλκΉ
0xDDDDDDDD μ λ§€μ§λλ² μ€λ₯κ° λ¨κ³ ν¬λμκ° λκ² λ¨. μμΈκ° μΆμ΄μ νλ² μ’ κ³ λ―Όμ ν΄λ΄€λλ°...
μ΄κ² μμ anim_list μ λ£μλ €κ³ νκ³ μλ fun0, func, end_ μ μ½λ°±μ μ μ₯νκ²λ νλ ANIM_CALLBACK λ§€ν¬λ‘ ν¨μκ° νλ μμν¬μ μμ‘΄μ μ΄λΌμ
cocos2d-x μ νλ μμν¬μ μν΄μ νλμ μ°μ΄μ§ μμΌλ©΄ GC λμ΄λ²λ¦¬λκ² μλκΉ μκ°νκ² λ¨.
κ·Έλμ GC λμ§ μκ³ λ°λ‘λ°λ‘ μΈ μ μλλ‘ μ½κ° μ°νλ‘λ₯Ό λ§λ€μ΄λ³΄κΈ°λ‘ νμ.
μ°μ anim_list λ FiniteTimeAction* μ΄λΌλ λ§ κ·Έλλ‘ Action κ°μ²΄μ ν¬μΈν°λ₯Ό μ μ₯νλ 리μ€νΈμ.
μΌλ° μ λλ©μ΄μ λΏλ§μ΄ μλλΌ, Callback λν μ¬κΈ°μ κΌ¬λΌλ°μΌλ©΄
FiniteTimeAction* >> ActionInstant* >> FiniteTimeAction* μΌλ‘ μ묡μ μΌλ‘ νλ³νμ΄ λλ κ² κ°μ.
λ°μ λ§λ anim_list2 κ° μ΄λ²μ κ³ μΉλ©΄μ λ§λ queue μΈλ°, μ΄κ±΄ Aciton* μ체λ₯Ό μ μ₯νλκ² μλλΌ, κ·Έ μ΄μ μ ννμΈ
std::function<void()> == ν¨μν¬μΈν° λ₯Ό μ μ₯νλ queue μ. μ ν¨μν¬μΈν°λ₯Ό μμΌλ νλ©΄ ν¨μν¬μΈν°λ staticλ§ λλκΉ.
κ·Έλ¦¬κ³ μ λλ©μ΄μ μ μ€μ ν λλ std::bind() μ μ΄μ©ν΄μ std::function<> κΌ΄μ ννλ₯Ό λ§λ€μ΄μ€¬μ. λ¬Όλ‘ ANIM_CALLBACK μ΄λ κ°μ΄
λ°μΈλ©ν΄μ£Όλ건 κ°μλ°, λ€λ₯Έ μ μ μ μκΊΌλ νλ μμν¬μ λ¬Άμ¬μκ³ μ§κΈκ±°λ κ·Έλ₯ λ°μΈλ© λμμ λΏμ΄μ§ μ½μ½μ€μ λ¬Άμ¬μμ§ μμ..
κ·Έλ¦¬κ³ μ λλ©μ΄μ μ μ΅μ€νμ ν΄μ£Όλ μμ ν¨μμμλ νμ μλκ±Έ λ°μμ, FiniteTimeAction* κΌ΄λ‘ λ°λ‘ λ§λ€μ΄μ£Όλ©΄μ runAction ν΄μ€¬κΈ° λλ¬Έμ
GCμ μν΄μ ν΄μ λ μΌλ €λ μκ² λμμ.... μλ§λ GCμ μν΄μ ν΄μ λ μΌλ €κ° μμκ±°μ γ γ γ ;;;;;;
μ‘μ€ λ.
+ κ·Έλ₯ λμΆ© νκ°κ²¨ μ΄ κΈμ΄λΌ κ·Έλ°μ§ λ΄κ° λ΄λ λ κΈμΈμ§ λͺ°κ² λ€... γ γ γ γ γ γ γ γ
5μ€ μμ½.
1. μ ν¬μμ κΈ°μ μΈ λ, μ¬λ¬κ°μ§ λ€μν μ λλ©μ΄μ μ λλ €λ°μ λ리λκ±Έ μ μ°νκ² νκ³ μΆμμ.
2. λν, μ λλ©μ΄μ μ΄ λλ λ μμ μΌλ‘ νΉμ μμ μ΄ μ²λ¦¬λλ κ²λ ꡬννκ³ μΆμμ.
3. μ½λ°±κ³Ό Queue μ μ¨μ νλνλμ© μ λλ©μ΄νΈ νλλ‘ νμ.
4. κ·Όλ°... CallFunc::create μ μ΄μ©ν΄μ λ°λ‘ queue μ μ§μ΄λ£μΌλ©΄ κ²½μ°μ λ°λΌ GC μ²λ¦¬κ° λμ΄λ²λ¦¬λ€? μλλ€?
5. κ·Έλ¬λ©΄ κ± κ·Έ μ΄μ ννμΈ ν¨μν¬μΈν° ννλ‘ μ§μ΄λ£μ΄μ GC μν₯κΆ λ°μ μκ² νκ³ νλνλμ© λ½μμ λ°λ‘λ°λ‘ λ³νν΄μ μ°μ.
GCκ° λκ° νλ€
νλμ μ μ΄λ€κ³ κ°λΉμ§ 컬λ νΈλλ κ²½μ°κ° μλ? μμ μ λ 0XDDDDDDDDλ‘ ν¬λμ¬ λ¬μλ μμΈμ κ·Έλ₯ μ΄κΈ°ν μν΄μ μμ
μ μ΄μ ν¨μμΈλ° μ΄κΈ°νλ₯Ό μν건 λ§μ΄ μλλ κ² κ°κ³ ... ν¨μ λ°μΈλ© ν λ λκ° μ€μ½νκ° λ€λ₯΄λ€λκ° ν΄μ λ΄μͺ½μμ μ½ν΄μ μ½λ°±ν¨μ λ΄λΆμ νμ λ°μΈλ©λ μ½λ°±μ νΈμΆ κ±Έμ΄μ€ λ κ·Έκ² μ보μ΄κ±°λ ν΄μ λ§€μ§λλ²λ‘ ν¬λμ λλ€λκ° νλ μκ°λ ν΄λ΄€λλ°, μ μ΄μ μ½λ°± λ°μΈλ© ν λ thisλ μΈμλ‘ κ°μ΄ λ£μ΄μ£Όλλ° μλλ€λκ² GC λμ΄ μλλ©΄ XλΌ μκ°νμ΄μ
μ¬μ€ κ·Έλ¦¬κ³ μ½λ£¨ν΄μΌλ‘ ꡬν ν΄λ³ΌκΉλ μΆμλλ° μ΄κ±΄ λ°°λ³΄λ€ λ°°κΌ½μ΄ λ ν°κ²©μ΄λΌ... γ γ γ γ
μ½μ½μ€ cppμλ? gcκ° μμ??
λ΄λΆ νλ μμ€ gcμ.
γ΄μ.. κ·Όλ° μ΄κ² c++κ°μ κ²½μ°μλ shared_ptr κ°μ΄ μ½μ½μ€ λ΄λΆ κ°μ²΄λ§λ€ μ°Έμ‘° μλ μΉ΄μ΄ν μ ν΄μ€μ μμμ μ μ§/ν΄μ νλ λ°©μμ΄μμ. λ§μ μλͺ»νλ―..
μ °μ΄λ ptrμ μ¬μ©μνλ€κ³ ν΄μ νλ μλ£νμ΄ μλλκΉ gcλλ¬Έμμλλ―
gcλμ΄ μλλΌμΉ΄λ©΄ λ체 λλλ¬ΈμΈκ±ΈκΉμ. 미리 λ°μΈλ©λκ±Έ μ§μ΄λ£μΌλ©΄ ν¬λμλκ³ λ°μΈλ© λκΈ° μ μ νμ νμ μΌλ‘ μ§μ΄λ£κ³ μ΄κ±Έ νλνλμ© κΊΌλ΄μ λ°μΈλ©ν΄μ μ°λ©΄ μλ¬κ° μκ³ ν