Я пытался взломать инструмент для визуализации шейдеров для своей игры и решил, что попробую использовать питон и какао. Я наткнулся на какую-то кирпичную стену. Может быть, это мое несколько плохое понимание цели c, но я не могу получить этот код для представления, которое я пытался написать, работая:
from objc import YES, NO, IBAction, IBOutlet
from Foundation import *
from AppKit import *
import gv
class SceneView(NSOpenGLView):
def __init__(self):
NSOpenGLView.__init__(self)
self.renderer = None
def doinit(self):
self.renderer = gv.CoreRenderer()
def initWithFrame_(self, frame):
self = super(SceneView, self).initWithFrame_(frame)
if self:
self.doinit()
print self.__dict__
return self
def drawRect_(self, rect):
clearColor = [0.0,0.0,0.0,0.0]
print self.__dict__
self.renderer.clear(CF_Target|CF_ZBuffer,clearColor)
Выводит это при выполнении:
{'renderer': <gv.CoreRenderer; proxy of <Swig Object of type 'GV::CoreRenderer *' at 0x202c7d0> >}
{}
2009-04-03 19:13:30.941 geom-view-edit[50154:10b] An exception has occured:
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjCTools/AppHelper.py", line 235, in runEventLoop
File "/mnt/gilead/amcharg/projects/geom-view-edit/build/Debug/geom-view-edit.app/Contents/Resources/SceneView.py", line 37, in drawRect_
self.renderer.clear(CF_Target|CF_ZBuffer,clearColor)
AttributeError: 'SceneView' object has no attribute 'renderer'
Кажется, что теряется моя переменная рендерера, что неудивительно, учитывая, насколько причудливым является код initWithFrame_, но это было что-то, что xcode, казалось, написал, что, я полагаю, имеет смысл, поскольку цель C имеет init, отдельный от alloc idiom. Однако все еще странно видеть этого питона.
Есть ли в любом случае, чтобы спасти это, или я должен вынуть его за код сарай снимать его и использовать QT или wxPython? Я подумал об использовании target-c, но я хочу проверить эти изящные привязки swig, которые я только что скомпилировал =)