So, i’ve tried to make somethink like Sims 2 , and it’s work
But right now, i have some problems with the saving system :s
In fact, i’ve seen the treeform code, but it’s not work.
here is a test code :
# -*- coding:Latin-1 -*-
import direct.directbase.DirectStart
from pandac.PandaModules import *
from direct.showbase.DirectObject import DirectObject
from direct.actor import Actor
from direct.task import Task
from direct.gui.DirectGui import *
import cPickle, random, os, math, sys, colorsys
class World (DirectObject) :
def __init__ (self) :
self.Player ()
self.GUI ()
self.keyMap = {"left":0, "right":0, "forward" :0, "backward" :0, "rotateL" :0, "rotateR":0 } # variable permettant au joueur de bouger
self.CameraKeyMap = {"left":0, "right":0, "forward":0, "backward":0, "up":0, "down":0, "rotateR":0, "rotateL":0 }
self.prevtime = 0
# commandes du joueur
self.accept ('arrow_left', self.setKey, ["rotateL",1])
self.accept ('arrow_left-up', self.setKey, ["rotateL",0])
self.accept ('arrow_right', self.setKey, ["rotateR",1])
self.accept ('arrow_right-up', self.setKey, ["rotateR",0])
self.accept ('arrow_up', self.setKey, ['forward',1] )
self.accept ('arrow_up-up', self.setKey, ['forward',0] )
self.accept ('arrow_down', self.setKey, ['backward',1] )
self.accept ('arrow_down-up', self.setKey, ['backward',0] )
self.accept ('lcontrol', self.setKey, ['run', 1] )
self.accept ('lcontrol-up', self.setKey, ['run',0] )
self.accept ('a', self.setKey, ['ActionButton',1])
self.accept ('a-up', self.setKey, ['ActionButton',0])
# commande de la caméra
self.accept ('8', self.CamerasetKey, ['forward', 1] )
self.accept ('8-up', self.CamerasetKey, ['forward', 0] )
self.accept ('7', self.CamerasetKey, ['rotateR', 1] )
self.accept ('7-up', self.CamerasetKey, ['rotateR', 0] )
self.accept ('9', self.CamerasetKey, ['rotateL', 1] )
self.accept ('9-up', self.CamerasetKey, ['rotateL', 0] )
self.accept ('5', self.CamerasetKey, ['backward', 1] )
self.accept ('5-up', self.CamerasetKey, ['backward', 0] )
self.accept ('6', self.CamerasetKey, ['right', 1] )
self.accept ('6-up', self.CamerasetKey, ['right', 0] )
self.accept ('4', self.CamerasetKey, ['left', 1] )
self.accept ('4-up', self.CamerasetKey, ['left', 0] )
self.accept ('+', self.CamerasetKey, ['up', 1] )
self.accept ('+-up', self.CamerasetKey, ['up', 0] )
self.accept ('-', self.CamerasetKey, ['down', 1] )
self.accept ('--up', self.CamerasetKey, ['down', 0] )
self.accept ('m', self.saving) # saving
taskMgr.add(self.move,"moveTask")
base.disableMouse( )
base.camera.setPos (0,0,3)
## les fonctions ##
def Player (self) :
self.Player1 = Actor.Actor ("models/panda-model")
self.Player1.reparentTo (render)
self.Player1.setScale (0.01,0.01,0.01)
def setKey(self, key, value): self.keyMap[key] = value
def CamerasetKey (self, key, value) : self.CameraKeyMap[key] = value
def move (self, task) :
elapsed = task.time - self.prevtime
if (self.keyMap["forward"]!=0) :
backward = self.Player1.getNetTransform().getMat().getRow3(1)
backward.setZ(0)
backward.normalize()
self.Player1.setPos(self.Player1.getPos() - backward*(elapsed*10))
if (self.keyMap["backward"]!=0) :
backward = self.Player1.getNetTransform().getMat().getRow3(1)
backward.setZ(0)
backward.normalize()
self.Player1.setPos(self.Player1.getPos() + backward*(elapsed*10))
if (self.keyMap ["rotateL"]!=0 ) :
self.Player1.setH(self.Player1.getH() - elapsed*100)
if (self.keyMap ["rotateR"] !=0 ) :
self.Player1.setH(self.Player1.getH() + elapsed*100)
# move for camera
if (self.CameraKeyMap["forward"]!=0) :
backward = base.camera.getNetTransform().getMat().getRow3(1)
base.camera.setPos(base.camera.getPos() + backward*(elapsed*50))
if (self.CameraKeyMap["backward"]!=0) :
backward = base.camera.getNetTransform().getMat().getRow3(1)
base.camera.setPos(base.camera.getPos() - backward*(elapsed*50))
if (self.CameraKeyMap["right"]!=0) :
base.camera.setH(base.camera.getH() - elapsed*70)
if (self.CameraKeyMap["left"]!=0) :
base.camera.setH(base.camera.getH() + elapsed*70)
if (self.CameraKeyMap["up"]!=0) :
base.camera.setZ(base.camera.getZ() + elapsed*20)
if (self.CameraKeyMap["down"]!=0) :
base.camera.setZ(base.camera.getZ() - elapsed*20)
if (self.CameraKeyMap["rotateR"]!=0) :
base.camera.setP(base.camera.getP() - elapsed*20)
if (self.CameraKeyMap["rotateL"]!=0) :
base.camera.setP(base.camera.getP() + elapsed*20)
self.prevtime = task.time
return Task.cont
## Graphic user Interface ##
def GUI (self) :
self.ButtonBuild = DirectButton(text = ("Smiley", "click!",),scale=.06,command = self.SmileyModel )
self.ButtonBuild.setPos (1, 0.8, -0.9)
def loading(self,file):
data = cPickle.load(open(file,"Saving"))
self.users,self.zones = data
def saving(self):
data = self.smile
#data = self.pack.pack(data)
open(file,'Saving').write(data)
def SmileyModel (self) :
self.smile = loader.loadModel ("models/smiley")
self.smile.reparentTo (render)
self.smile.setPos(self.Player1.getPos())
w = World ()
run ()
and here is the problem in the compilation :
open(file,'Saving').write(data)
TypeError : coercing to Unicode : need string or buffer, type found
What can I do to resolve this problem ?
Thanks in advance