6

cocos2d フレームワークを使用してゲームを作成しています。このフレームワークはまったく初めてなので、ディレクター オブジェクトを期待どおりに動作させることができません。コード スケルトンは次のとおりです。

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 = 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():
        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 main():
    scene = TestScene()
    director.init(world_width, world_height, do_not_scale=True)
    world_map = NetworkMap(world_width, world_height)
    scroller = cocos.layer.ScrollingManager()
    scroller.add(world_map)
    scene.add(scroller)
    director.run(scene)

そのため、何らかの理由で、監督は必要なすべての属性を持っていません。スタック トレースは次のとおりです。

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'
4

2 に答える 2

6

最初のシーンをインスタンス化する前に、ディレクターを初期化する必要があります。director は、画面の初期化、Cocos2D フレームワークのセットアップなどを行うグローバル オブジェクトです。

他にもいくつかのエラーが見つかりました:

  • ColorLayer完全に修飾されるように変更する必要がありますcocos.layer.ColorLayer
  • on_enterself最初の引数として持つ必要があります。
  • f_refresh_marksTestScene クラスで定義する必要があります。

これがコードの作業コピーです。(エラーをスローしないという意味で動作しますが、何らかのスクロールを行うという意味ではありません。)

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()
于 2012-11-06T08:45:34.023 に答える
1

同じ問題 (非常によく似たスタック トレース) がありました。それは、director.init() を呼び出す前にレイヤーを作成しようとしていたためです。director.init() をコードの前半に移動すると、修正されました。

于 2013-05-23T16:37:34.437 に答える