2012-11-06 1 views
4

우리는 cocos2d 프레임 워크를 사용하여 게임을 만듭니다. 우리는이 프레임 워크가 완전히 새롭기 때문에 우리가 기대하는대로 디렉터 객체를 작동시키지 못합니다. 여기에 우리의 코드 스켈레톤이 있습니다 :Cocos2d : AttributeError : 'Director'객체에 '_window_virtual_width'속성이 없습니다.

그래서 감독은 우리가 원하는 모든 속성을 가지고 있지 않습니다. 우리의 스택 추적은 다음과 같습니다

Traceback (most recent call last): 
File "map.py", line 49, in <module> 
main() 
File "map.py", line 39, in main 
scene = TestScene() 
File "map.py", line 29, in __init__ 
super(TestScene,self).__init__() 
File "/usr/local/lib/python2.7/dist-packages/cocos2d-0.5.5-py2.7.egg/cocos/scene.py",  line 95, in __init__ 
super(Scene,self).__init__() 
File "/usr/local/lib/python2.7/dist-packages/cocos2d-0.5.5-py2.7.egg/cocos/cocosnode.py", line 114, in __init__ 
self.camera = Camera() 
File "/usr/local/lib/python2.7/dist-packages/cocos2d-0.5.5-py2.7.egg/cocos/camera.py", line 56, in __init__ 
self.restore() 
File "/usr/local/lib/python2.7/dist-packages/cocos2d-0.5.5-py2.7.egg/cocos/camera.py", line 76, in restore 
width, height = director.get_window_size() 
File "/usr/local/lib/python2.7/dist-packages/cocos2d-0.5.5-py2.7.egg/cocos/director.py", line 522, in get_window_size 
return (self._window_virtual_width, self._window_virtual_height) 
AttributeError: 'Director' object has no attribute '_window_virtual_width' 
+0

도움이되지 않았습니다! 죄송합니다! –

답변

4

당신은 당신이 당신의 첫 장면을 인스턴스화하기 전에 이사를 초기화해야합니다. 당신은 완전하고, 예를 들어, 수 ColorLayer을 변경해야

  • : 감독은, 화면을 초기화한다적인 Cocos2D 프레임 워크를 설정하는 전역 객체 등

    은 내가 찾은 몇 가지 다른 오류입니다 cocos.layer.ColorLayer.
  • on_enter은 첫 번째 인수로 self이어야합니다.
  • TestScene 클래스에 f_refresh_marks을 정의해야합니다.

다음은 코드의 작업 복사본입니다. (작업은, 그것이 스크롤의 어떤 종류를하지 않는 것이 오류가 발생하지 않음을 의미.에)

from cocos.director import director 
from cocos.layer import base_layers 


import sys 
import math 
import os 

import pyglet 
import cocos 


world_width = 1000 
world_height = 1000 
class NetworkMap(cocos.layer.ScrollableLayer): 
    def __init__(self, world_width, world_height): 
     self.world_width = world_width 
     self.world_height = world_height 
     super(NetworkMap, self).__init__() 
     bg = cocos.layer.ColorLayer(170,170,0,255,width=500,height=500) 
     self.px_width = world_width 
     self.px_height = world_height 
     self.add(bg,z=0) 

class TestScene(cocos.scene.Scene): 
    def __init__(self): 
     super(TestScene,self).__init__() 

    def on_enter(self): 
     director.push_handlers(self.on_cocos_resize) 
     super(TestScene, self).on_enter() 

    def on_cocos_resize(self, usable_width, usable_height): 
     self.f_refresh_marks() 

    def f_refresh_marks(self): 
     pass 

def main(): 
    director.init(world_width, world_height, do_not_scale=True) 
    scene = TestScene() 
    world_map = NetworkMap(world_width, world_height) 
    scroller = cocos.layer.ScrollingManager() 
    scroller.add(world_map) 
    scene.add(scroller) 
    director.run(scene) 

if __name__ == '__main__': main() 
+0

흥미 롭습니다 : "빠른 시작"예제 코드는 감독을 초기화하려고 시도하지만 여전히 오류가 있습니다. http://python.cocos2d.org/doc/programming_guide/quickstart.html – user391339

0

나는 (매우 비슷한 스택 트레이스와) 같은 문제를 가지고 내가하려고했던 때문이었다 director.init()를 호출하기 전에 레이어를 만듭니다. director.init()를 코드의 앞부분으로 옮기면 나에게 맞춰졌다.

관련 문제