Hi all
I am building a 2D game,
and im working now on the movements,
but i have a problem with the jumping act,
i try to make the actor to go up and go back down only by pressing on the up-arrow ones.
but what really happend that he dont make move on the screen!
i check and see that the Coordinate of the actor is moving but the actor himself dont move on the screen.
so how can i update the screen or make the jumping update evrey frame?
this is my code
thenk you all
import direct.directbase.DirectStart
from panda3d.core import CollisionTraverser,CollisionNode
from panda3d.core import CollisionHandlerQueue,CollisionRay
from panda3d.core import Filename,AmbientLight,DirectionalLight
from panda3d.core import PandaNode,NodePath,Camera,TextNode
from panda3d.core import Vec3,Vec4,BitMask32
from direct.gui.OnscreenText import OnscreenText
from direct.actor.Actor import Actor
from direct.showbase.DirectObject import DirectObject
import random, sys, os, math
import time
from direct.gui.OnscreenImage import OnscreenImage
from direct.task import Task
from math import pi, sin, cos
from direct.showbase.ShowBase import ShowBase
from direct.task import Task
from direct.actor.Actor import Actor
from direct.gui.OnscreenImage import OnscreenImage
from pandac.PandaModules import TransparencyAttrib
from direct.interval.IntervalGlobal import Sequence
from panda3d.core import Point3
# Function to put instructions on the screen.
def addInstructions(pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1),
pos=(-1.3, pos), align=TextNode.ALeft, scale = .05)
# Function to put title on the screen.
def addTitle(text):
return OnscreenText(text=text, style=1, fg=(1,1,1,1),
pos=(1.3,-0.95), align=TextNode.ARight, scale = .07)
wrspeed=0.05
class World(DirectObject):
def __init__(self):
self.keyMap = {"left":0, "right":0, "forward":0, "shift":0, "space":0, "jump":0}
base.win.setClearColor(Vec4(0,0,0,1))
# Post the instructions
#self.title = addTitle("Panda3D Tutorial: Roaming Ralph (Walking on Uneven Terrain)")
self.inst1 = addInstructions(0.95, "[ESC]: Quit")
self.inst2 = addInstructions(0.90, "[Left Arrow]: Run Left")
self.inst3 = addInstructions(0.85, "[Right Arrow]: Run Right")
self.inst4 = addInstructions(0.80, "[Shift]: Accelerate Ralph")
# Set up the environment
#
# This environment model contains collision meshes. If you look
# in the egg file, you will see the following:
#
# <Collide> { Polyset keep descend }
#
# This tag causes the following mesh to be converted to a collision
# mesh -- a mesh which is optimized for collision, not rendering.
# It also keeps the original mesh, so there are now two copies ---
# one optimized for rendering, one for collisions.
self.environ = loader.loadModel("models/world")
self.environ.reparentTo(render2d)
self.environ.setPos(0,0,0)
imageObject = OnscreenImage(image = 'env_sky.jpg', pos = (0,0,0),parent=render2d)
base.cam.node().getDisplayRegion(0).setSort(20)
imageObject.setScale(1,1,1)
# Create the main character, Ralph
#ralphStartPos = self.environ.find("**/start_point").getPos()
self.ralph = Actor("models/ralph",
{"run":"models/ralph-run",
"walk":"models/ralph-walk"})
self.ralph.reparentTo(render)
self.ralph.setScale(.2)
self.ralph.setPos(0,0,0)
self.ralph.setHpr(270, 0, 0)
self.bush= Actor("bush2")
self.bush.reparentTo(render)
self.bush.setScale(.1)
self.bush.setPos(2,0,0)
self.bush.setHpr(270, 0, 0)
self.Ground2= Actor("Ground2")
self.Ground2.reparentTo(render)
self.Ground2.setScale(0.1)
self.Ground2.setPos(2,-55,0)
self.Ground2.setHpr(270, 0, 0)
self.accept("escape", sys.exit)
self.accept("arrow_left", self.setKey, ["left",1])
self.accept("arrow_right", self.setKey, ["right",1])
self.accept("arrow_up",self.setKey, ["jump",1])
self.accept("shift", self.setKey, ["shift",1])
self.accept("space", self.setKey, ["space",1])
self.accept("arrow_right-up", self.setKey, ["right",0])
self.accept("arrow_left-up", self.setKey, ["left",0])
#self.accept("arrow_up-up", self.setKey, ["jump",0])
self.accept("shift-up", self.setKey, ["shift",0])
self.accept("space-up", self.setKey, ["space",0])
taskMgr.add(self.move,"test")
# Game state variables
self.walking=False
self.running=False
self.jumping=False
# Set up the camera
base.disableMouse()
base.camera.setPos(self.ralph.getX(),self.ralph.getY() -10,self.ralph.getZ()+2)
base.camera.lookAt(0,2,2)
#Records the state of the arrow keys
def setKey(self, key, value):
self.keyMap[key] = value
def left (self,wrspeed):
self.ralph.setHpr(270,0,0)
self.ralph.setPos(self.ralph.getX()-wrspeed,self.ralph.getY(),self.ralph.getZ())
base.camera.setPos(self.ralph.getX(),self.ralph.getY() -10,self.ralph.getZ()+2)
base.camera.lookAt(self.ralph.getX()-0.1,2,2)
if(wrspeed==0.05):
if(self.walking is False):
self.ralph.loop("walk")
self.running=False
self.walking=True
else:
if(self.running is False):
self.ralph.loop("run")
self.running=True
self.walking=False
self.ralph.loop("run")
def right (self,wrspeed):
self.ralph.setHpr(90,0,0)
self.ralph.setPos(wrspeed+self.ralph.getX(),self.ralph.getY(),self.ralph.getZ())
base.camera.setPos(self.ralph.getX(),self.ralph.getY() -10,self.ralph.getZ()+2)
base.camera.lookAt(self.ralph.getX()+0.1,2,2)
if(wrspeed==0.05):
if(self.walking is False):
self.ralph.loop("walk")
self.running=False
self.walking=True
else:
if(self.running is False):
self.ralph.loop("run")
self.running=True
self.walking=False
self.ralph.loop("run")
def jump1 (self):
self.ralph.setZ(self.ralph.getZ()+0.5)
time.sleep(0.5)
self.ralph.setZ(self.ralph.getZ()-0.5)
def stop (self):
self.ralph.stop()
self.walking = False
self.running = False
self.ralph.pose("walk",5)
def move(self,task):
if (self.keyMap["shift"]!=0):
wrspeed=0.1
print(wrspeed)
else:
wrspeed=0.05
if (self.keyMap["left"]!=0):
self.left(wrspeed)
if (self.keyMap["right"]!=0):
self.right(wrspeed)
if (self.keyMap["jump"]!=0):
self.jump1()
if (self.keyMap["right"]==0 and self.keyMap["left"]==0 ):
self.stop()
return Task.cont
w = World()
run()