2013-05-01 1 views
2

저는 cocos2d (iphone jsb + cocos2d-html5)를 사용하여 크로스 플랫폼 게임을 작성하고 있으며 실제로 크로스 플랫폼으로 만드는 방법에 대해 궁금합니다. . -html5와 함께 작동하는 코드는 -iphone jsb에서 반드시 작동하지 않으며 그 반대도 마찬가지입니다.cocos2d-iphone jsb & cocos2d-html5 호환성 : ctor, init, associateWithNative

  1. ctorinit의 차이는 무엇 :

    현재 나는 다음 (관련) 질문에 붙어있어?
  2. ctor은 언제 오버로드해야합니까? init은 언제 오버로드해야합니까?
  3. _super()ctor 및/또는 init으로 전화해야합니까?
  4. 과부하 일 경우 .init()을 에서 언제 호출해야합니까? ctor?
  5. 개체를 어떻게 인스턴스화해야합니까? var inst = new Obj(); inst.init();? 아니면 var inst = new Obj();일까요? 나는 의미가있는 .create() 방법이 있다는 것을 이해하지만, 나 자신의 create 방법을 쓰는 경우에 요청하고있다.
  6. associateWithNative은 언제 사용해야합니까?

나는 html5 버전에서 작동하는 몇 가지 코드가 있었지만 객체가 이미 iPhone jsb 버전에서 초기화되었다는 오류가 발생하여 분명히 잘못된 것이 있습니다. ... 나는 MoonWarriors 코드를보고 시도했지만 결코 내가 필요했다 생각 associateWithNative를 사용하지 않는 것, 그것은 때로는 때로는하지, 때로는 등, 때때로되지는 ctor에서 init 호출 ctor 오버로드

답변

1

나에게도 나름의 해결책을 찾는 것이 어렵다. 나는 같은 문제를 겪고있다. 브라우저에서 주로 테스트 한 게임을 개발했다. & 이제는 많은 문제가있다. &, iOS로 포팅 할 수 없다.

은 지금까지 귀하의 질문은 간다 : 클래스의

  1. ctor 통화 생성자, init는 새로운 객체를 초기화합니다.
  2. 서브 클래 싱 클래스의 개체에 대한 사용자 지정 초기화 동작을 수행 할 때 init 서브 클래 싱 할 때 ctor을 오버로드해야합니다.
  3. MoonWarriors 데모에있는 모든 곳에서 볼 수는 없지만 항상 말하고 싶습니다.
  4. 저는 이것이 좋은 습관이 아니라고 생각합니다.
  5. var inst = new Obj(); & 다음 inst.init() 또는 다른 방법은 당신이 만든 클래스, 예로부터 객체를 생성 정보 var inst = Obj.create();
  6. associateWithNativector

에 호출 할 필요가 호출하는 것입니다당신은 당신이 창조에 할당 할 & 개인 재산으로 _hp이있는 var Warrior 만약 내가 이해로, 3 가지 방법은 멀리있다 :

1.With 생성자 :

var myWarrior = new Warrior(hp); 

& 당신은 ctor:function(hp)..

2.With 초기화 생성자에 _hp을 설정

var myWarrior = new Warrior(); 
myWarrior.init(hp); 
다음

var myWarrior = Warrior.create(hp); 

& 당신이 var Warrior &의 선언 이후가 될 것이다 작성 방법에 _hp을 설정

&는 당신은 초기화에서 _hp에게 init:function(hp)..

3.With 공장 방법을 설정 새 오브젝트 &을 올바르게 초기화하십시오.

EDIT : ctor을 더 이상 다시 호출 할 필요가 없어 associateWithNative을 호출 할 필요가 없으므로 associateWithNative을 배치 할 수 있습니다. 당신이 ERROR in *: Invalid Proxy object 오류에 우연히 발견하는 경우 - 다른 플랫폼적인 Cocos2D-JS 코드를 컴파일 할 때 순간 JS 세계에서 오는 사람이 문제가 발생할 수 있습니다 특수에도 불구하고 더 편리 보일 수 있습니다 -

2

ad 1-5. 나는 ctor에 덮어 쓰기하는 것을 발견했습니다 그것은 ctor 메소드를 덮어 쓰기 때문일 수도 있습니다 (저의 경우는 거의 없었습니다). 또한 때로는 네이티브 클래스의 생성자 메서드는 네이티브 클래스에서 상속 한 클래스에 대해 최종적으로 덮어 쓰거나 처리하는 매개 변수를 기대하며 일부 충돌이 발생할 수도 있습니다.

그 외에도 Kex는 모든 차이점을 설명했습니다. 제공된 샘플과 cocos2d 소스를 가장 안전하게보고 "Cocos2d way"는 init 메소드와 정적 팩터 create의 조합을 사용하는 것입니다.

그것은 더 이상 associateWithNative 방법을 사용하는 데 필요한 ad 6. (여기에서 자세한 내용을보실 수 있습니다 : cocos2d-js-devel)