Cocos2d:AttributeError:“Director”对象没有属性“_window_virtual_width”

2024-04-20 11:28:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在使用cocos2d框架来创建一个游戏。我们对这个框架是全新的,所以我们不能让director对象像我们期望的那样工作。下面是我们的代码框架:

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)

所以出于某种原因,导演并没有具备我们想要的所有特质。 我们的堆栈跟踪是:

^{pr2}$

Tags: importself框架layerworldinitondef
2条回答

我也遇到了同样的问题(堆栈跟踪非常相似),这是因为我试图在调用之前创建一个层董事初始化(). 移动董事初始化()到前面的代码为我修复了它。在

在实例化第一个场景之前,需要初始化导演。director是初始化屏幕、设置Cocos2D框架等的全局对象

我发现了一些其他错误:

  • 您需要将ColorLayer更改为完全限定,例如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()

相关问题 更多 >