I am studying python

I am studying python from some time but not everything is clear. :frowning: What self stand for?

“self” means the current class instance. It’s Python’s equivalent to “this” in C++, Java, and C#, except “self” must be explicitly defined as a parameter: if not given, the method in question is assumed to be static.

There is something wrong with my loop.

from math import pi, sin, cos 
from direct.showbase.ShowBase import ShowBase 
from direct.task import Task 
import sys 
import direct.directbase.DirectStart  
from direct.actor.Actor import Actor 
from pandac.PandaModules import * 
from direct.gui.DirectGui import *
from direct.showbase.DirectObject import DirectObject

class World(DirectObject): 
    def __init__(self): 
        #ShowBase.__init__(self) 
  
        self.obekti()
        self.accept('escape', sys.exit) 
        self.accept('arrow_up', self.mods2, [self.environ]) 
        self.accept('arrow_down', self.mods1, [self.environ])
        self.manajer=taskMgr.add(self.mods, "mods") 

        teren = loader.loadModel("models/igrataegg")
		
    
    def mods1(self, model):
        #mydummy = loader.loadModel("models/igrataegg.egg")
        mydummy = self.environ
        player = mydummy
        self.environ.setPos(100.0 , 100.0 , 100 )
	    
    def mods2(self, camera):
     	 
         base.disableMouse() 

         self.wyrtene = self.environs.setPos(self.environ.getX() + 1 , 0, 0) 
         dummy = loader.loadModel("models/4owek.egg") 
         self.wyrtene.loop()
         player = dummy 

         dummy=render.attachNewNode("models/4owek.egg") 
         base.camera.reparentTo(dummy) 
         base.camera.setPos(self.environ2.getX() - 180 ,self.environ2.getY() + 0,self.environ2.getZ() + 50 )# 10 = distance between cam and point 80
         dummy.setH(10) #this will rotate it 60 degrees around the point 
         
         base.cam.lookAt(dummy)
    def	 mods(self,task):
	       self.mods2(self)
	
    def obekti(self):
	               self.environs = render.attachNewNode('environs')
                       self.environ = loader.loadModel("models/kutia") 
                       self.environ.reparentTo(self.environs) 
                       self.environ.setScale(0.25, 0.25, 0.25) 
                       self.environ.setPos(0, 0, 0) 
                       self.environ2 = loader.loadModel("models/4owek") 
                       self.environ2.reparentTo(render) 
                       self.environ2.setScale(0.25, 0.25, 0.25) 
                       self.environ2.setPos(0, 0, 0)
 #   def spinCameraTask(self, task): 
 #      angleDegrees = task.time * 6.0 
 #      angleRadians = angleDegrees * (pi / 180.0) 
 #      self.camera.setPos(20 * sin(angleRadians), -20.0 * cos(angleRadians), 3) 
 #      self.camera.setHpr(angleDegrees, 0, 0) 
 #      return Task.cont 
  
w = World() 
run() 

Can you be more specific? What’s wrong? Is there an error message, or does it simply fail to do what you expect? What is it that you expect it to do, and what does it do instead?

David

I want to make a loop.And here is the error:

DirectStart: Starting the game.
Known pipe types:
  wglGraphicsPipe
(all display modules loaded.)
Traceback (most recent call last):
  File "sourcecode(rabote6tokopie4).py", line 46, in mods
    self.mods2(self)
  File "sourcecode(rabote6tokopie4).py", line 36, in mods2
    self.wyrtene.loop()
AttributeError: 'NoneType' object has no attribute 'loop'
:task(error): Exception occurred in PythonTask mods
Traceback (most recent call last):
  File "sourcecode(rabote6tokopie4).py", line 66, in <module>
    run()
  File "C:\Program Files\panda\Panda3D-1.6.2\direct\showbase\ShowBase.py", line
2423, in run
    self.taskMgr.run()
  File "C:\Program Files\panda\Panda3D-1.6.2\direct\task\TaskNew.py", line 471,
in run
    self.step()
  File "C:\Program Files\panda\Panda3D-1.6.2\direct\task\TaskNew.py", line 429,
in step
    self.mgr.poll()
  File "sourcecode(rabote6tokopie4).py", line 46, in mods
    self.mods2(self)
  File "sourcecode(rabote6tokopie4).py", line 36, in mods2
    self.wyrtene.loop()
AttributeError: 'NoneType' object has no attribute 'loop'

It is telling you that you are trying to call a method named “loop”, but you have not written a method named “loop”. And in fact, I don’t see a method by that name in your code above.

If you want to do the same thing over and over again in Panda code, you normally won’t do it with a loop anyway. Instead, you’ll probably use a task, and you’ll return task.cont at the end to do the same thing again next frame. Take a look at tasks in the manual.

David

error

Sorry?

Why when I press right arrow the object doesnt move?

from math import pi, sin, cos
 
from direct.showbase.ShowBase import ShowBase
from direct.task import Task
from direct.actor.Actor import Actor
 
class MyApp(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
 
        # Load the environment model.
        self.environ = self.loader.loadModel("models/4owek.egg")
        # Reparent the model to render.
        self.environ2 = self.loader.loadModel("models/kutia.egg")
        self.environ.reparentTo(self.render)
        self.environ2.reparentTo(self.render)
        # Apply scale and position transforms on the model.
        self.environ2.setScale(0.25, 0.25, 0.25)
        self.environ2.setPos(0, 40, 0)
        self.environ.setScale(0.25, 0.25, 0.25)
        self.environ.setPos(0, 50, 0)
        # Add the spinCameraTask procedure to the task manager.
        arrow = self.accept('arrow_right', self.spinCameraTask, [self.environ])
	if arrow:
	
	      self.taskMgr.add(self.spinCameraTask, "SpinCameraTask")
       
 
        # Load and transform the panda actor.

 
    # Define a procedure to move the camera.
    def spinCameraTask(self, task):
       # angleDegrees = task.time * 6.0
       # angleRadians = angleDegrees * (pi / 180.0)
       # self.camera.setPos(20 * sin(angleRadians), -20.0 * cos(angleRadians), 3)
      self.environ.setPos(self.environ.getX()+0.1, 40, 0)
      camera.setPos(self.environ.getX()+35,self.environ.getY()+15,self.environ.getZ()+250)
      dummy= self.environ
      base.camera.lookAt(dummy)
      return Task.cont
 
app = MyApp(

Might be a good idea to set back and learn python a bit better before jumping into panda just yet.

I know… I did the same:) Wasn’t for my background in other langues I wouldn’t have been able to get this far.

  1. arrow = function self.accept… why? self.accept doesn’t return any value that I know of.

  2. You then call arrow for a value (if arrow)… there wont be any value to compare and will return false.

Like I said… best to learn python a bit better before comming onto here… Not that the people are just helpful, but you will burn out your welcome faster than if you did and only made mistakes on the panda code it self.

Ok I will learn it better. :slight_smile:

diveintopython.nfshost.com/toc/index.html

Good place to start learning some of it.

What might help get you started sooner:

  1. Pick a simple task to do 1st instead of trying for a 3d game such as: math calculators, strings, list, dic, arrys, and then text base game.

You’ll learn a lot more setting smaller goals like that instead of one big one.

For example, math, strings, list, dic, and arrys are all part of a text base game. You build up to it, but you learn a lot more in the end.

Once you get that down… next step would maybe be learning how classes and inheritance work to help sperate and control your code to help it grow faster and create less bugs over all :slight_smile: (The faster and the better you understand how classes/functions/methods work… the better programmer you will be I swear by it xD)

Thanks

from math import pi, sin, cos 
from direct.showbase.ShowBase import ShowBase 
from direct.task import Task 
import sys 
import direct.directbase.DirectStart  
from direct.actor.Actor import Actor 
from pandac.PandaModules import * 
class solider():
    def new(self):
	 
         self.woinik = self.loader.loadModel("models/4owek.egg")
	 self.woinik.reparentTo(self.render) 
         self.woinik.setScale(1,1,1)
         self.woinik.setPos(0,0,0)
         sys.exit
class MyApp(ShowBase): 
    def __init__(self): 
        ShowBase.__init__(self) 

       # self.environ = self.loader.loadModel("models/igrataegg") 
       # self.environ.reparentTo(self.render) 
       # self.environ.setScale(0.25, 0.25, 0.25) 
        #self.environ.setPos(0, 0, 0) 
        self.environ2 = self.loader.loadModel("models/4owek.egg") 
        self.environ2.reparentTo(self.render) 
        self.environ2.setScale(0.25, 0.25, 0.25) 
        self.environ2.setPos(0,0, 0) 
        self.accept('escape', sys.exit) 
        self.accept('arrow_up-repeat', self.mods, [self.environ2]) 
        self.accept('arrow_down-repeat', self.mods1, [self.environ2])
	
 #       self.taskMgr.add(self.spinCameraTask, "SpinCameraTask") 

        teren = loader.loadModel("models/igrataegg")
	gravityFN=ForceNode('world-forces')
        gravityFNP=render.attachNewNode(gravityFN)
        gravityForce=LinearVectorForce(0,0,-9.81) #gravity acceleration
        gravityFN.addForce(gravityForce)

        base.physicsMgr.addLinearForce(gravityForce)
    
    def mods1(self, model):
        #mydummy = loader.loadModel("models/igrataegg.egg")
        #mydummy = self.environ
        #player = mydummy88
        woin=solider()
	woin.new()  
        self.environ2.setY(self.environ2,.5)
     
 
	return Task.cont 
    def mods(self, camera):
     dummy=self.environ2  
     base.camera.setY(75)
     base.cam.lookAt(dummy)
     return Task.cont 

         #dummy = loader.loadModel("models/4owek.egg") 

         #player = dummy 
         #self.environ2.setPos(self.environ2.getX() + 25, 250,100  )
         #dummy=render.attachNewNode("models/4owek.egg") 
         #base.camera.reparentTo(self.environ2) 
         #self.camera.setPos(self.environ2.getX() + 500, 250, 1000)# 10 = distance between cam and point 
      #   dummy.setH(10) #this will rotate it 60 degrees around the point 
      #  self.camera.setHpr(2.2, 0, 0)
      #return Task.cont88
      #base.cam.lookAt(dummy)

 
 #   def spinCameraTask(self, task): 
 #     2 angleDegrees = task.time * 6.0 
 #      angleRadians = angleDegrees * (pi / 180.0) 
 #      self.camera.setPos(20 * sin(angleRadians), -20.0 * cos(angleRadians), 3) 
 #      self.camera.setHpr(angleDegrees, 0, 0) 
# return Task.cont 
  
app = MyApp() 
app.run() 

Why class solider has no attribute “loader”?

Because “solider” is a class defined by you, and you do not set this attribute anywhere in your code?
Is it possible that you wanted to use the global variable “loader” to load a model? Then you must not write “self.” in front of it.

By the way: the indention on the next line will cause the next error message.