Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>In some places you try to use <code>int</code> value as <code>object</code>:</p> <pre><code>ground = 720 self.y = ground.y # error !!! </code></pre> <p><code>ground</code> is number <code>int</code>(integer) not object with <code>.y</code></p> <p>You could use <code>pygame.Rect()</code></p> <pre><code>ground = pygame.Rect(0, 750, 0, 0) # (x, y, width, heigh) </code></pre> <p>and then you can use <code>ground.x</code>, <code>ground.y</code>, and others - see <a href="http://www.pygame.org/docs/ref/rect.html" rel="nofollow">pygame.Rect()</a>.</p> <p>.</p> <hr> <p>btw: you should move <code>#Movement</code> code, <code># Movement variables</code>code, <code># Screen wrap</code> code into <code>Player</code> class as functions and call that functions in main loop - to make main loop more readable.</p> <p><code># Movement variables</code>code, <code># Screen wrap</code> code could be in <code>player.update</code></p> <p><code># Movement</code> code could be in Player class as <code>event_handler(self, event)</code></p> <pre><code>def event_handler(self, event): if event.type == pygame.KEYDOWN: if event.key == pygame.K_a: velX = -5 elif event.key == pygame.K_d: velX = +5 elif event.type == pygame.KEYUP: if event.key in (pygame.K_a, pygame.K_d): velX = 0 </code></pre> <p>(you can use <code>elif</code> as above)</p> <p>Now you can use this in main loop <code>player.event_handler(event)</code></p> <hr> <p><strong>EDIT:</strong></p> <p>I made many modifications in your code - but I had no time to finish it.</p> <p>Player still doesn't jump. But you have 10 moving zombies, pause (press P) and all in classes.</p> <pre><code>import pygame import random # Player class Player(pygame.sprite.Sprite): def __init__(self, x, y, gravity): # Player dimensions and position self.gravity = gravity # Player image and animation self.images = [] self.images.append(pygame.image.load('images/soldier.png')) self.images.append(pygame.image.load('images/soldier2.png')) #~ self.images.append(pygame.image.load('ball1.png')) #~ self.images.append(pygame.image.load('ball2.png')) self.maxImage = len(self.images) self.currentImage = 0 #~ self.rect = pygame.Rect(x, y, 80, 80) self.rect = self.images[0].get_rect() self.rect.x = x self.rect.y = y self.timeTarget = 10 self.timeNum = 0 self.velX = 0 self.velY = 0 # Jump and gravity self.vSpeed = 1 self.jumpForce = 8 self.maxVspeed = 3 self.isJumping = False # Jump inputs def handle_events(self, event): if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: if not self.isJumping: self.isJumping = True elif event.key == pygame.K_a: self.velX = -5 elif event.key == pygame.K_d: self.velX = +5 elif event.type == pygame.KEYUP: if event.key in (pygame.K_a, pygame.K_d): self.velX = 0 print "isJumping:", self.isJumping # PLayer updates def update(self, ground): # Jumping self.vSpeed -= self.gravity if self.vSpeed &gt; self.maxVspeed: self.vSpeed = self.maxVspeed self.rect.y -= self.vSpeed if self.isJumping: self.vSpeed -= self.jumpForce if self.rect.bottom &gt;= ground.y: self.vSpeed = 0 self.rect.bottom = ground.y self.isJumping = False # Animations if self.timeNum == self.timeTarget: self.currentImage += 1 if self.currentImage &gt;= self.maxImage: self.currentImage = 0 self.timeNum = 0 self.rect.centerx += self.velX self.rect.centery += self.velY # Screen wrap if self.rect.right &gt; 1280: self.rect.left = 0 elif self.rect.left &lt; 0: self.rect.right = 1280 # Player rendering def render(self, surface): surface.blit(self.images[self.currentImage], self.rect) #---------------------------------------------------------------------- class Zombie(): def __init__(self, x, y): self.image = pygame.image.load('images/zombie.png') #~ self.image = pygame.image.load('ball2.png') self.rect = self.image.get_rect() self.rect.x = x self.rect.y = y self.direction_left = True def update(self, surface_rect): if self.direction_left: self.rect.x -= 1 if self.rect.left &lt;= surface_rect.left: self.direction_left = not self.direction_left else: self.rect.x += 1 if self.rect.right &gt;= surface_rect.right: self.direction_left = not self.direction_left def render(self, surface): surface.blit(self.image, self.rect) #---------------------------------------------------------------------- class Background(): def __init__(self): self.image = pygame.image.load('images/arena2.jpg') #~ self.image = pygame.image.load('background.jpg') self.rect = self.image.get_rect() def render(self, surface): surface.blit(self.image, self.rect) #---------------------------------------------------------------------- class Game(): def __init__(self): pygame.init() # A few variables self.gravity = .50 self.ground = pygame.Rect(0, 720, 0, 0) # Screen size = (1280, 720) self.screen = pygame.display.set_mode(size) pygame.display.set_caption('Moon Survival!') # Moon / Background self.moon = Background() # Zombies self.zombies = [] for i in range(10): self.zombies.append( Zombie(random.randint(0,1280), random.randint(0,720)) ) # Player self.player = Player(25, 320, self.gravity) # Font for text self.font = pygame.font.SysFont(None, 72) # Pause - center on screen self.pause_text = self.font.render("PAUSE", -1, (255,0,0)) self.pause_rect = self.pause_text.get_rect(center = self.screen.get_rect().center) def run(self): clock = pygame.time.Clock() # "state machine" RUNNING = True PAUSED = False GAME_OVER = False # Game loop while RUNNING: # (all) Events for event in pygame.event.get(): if event.type == pygame.QUIT: RUNNING = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: RUNNING = False elif event.key == pygame.K_p: PAUSED = not PAUSED # Player/Zomies events if not PAUSED and not GAME_OVER: self.player.handle_events(event) # (all) Movements / Updates if not PAUSED and not GAME_OVER: self.player.update(self.ground) for z in self.zombies: z.update(self.screen.get_rect()) # (all) Display updating self.moon.render(self.screen) for z in self.zombies: z.render(self.screen) self.player.render(self.screen) if PAUSED: self.screen.blit(self.pause_text, self.pause_rect) pygame.display.update() # FTP clock.tick(75) # --- the end --- pygame.quit() #--------------------------------------------------------------------- Game().run() </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload