python - Rect Errors on Pygame -


hi have been creating game player has dodge oil barrels , have been working on getting rect can create when 2 sprites collide. seems collision boxes messed because whenever start game automatically detect collision between player , barrel.

this code:

import pygame import os import time import sys import pyganim import random global rand  threading import thread   class updatethread(thread):     def __init__(self):         self.stopped = false         thread.__init__(self)      def run(self):         while not self.stopped:             self.downloadvalue()             time.sleep(2)     def downloadvalue(self):         rand=random.randrange(1, 10)   class oil(object):      def __init__(self):         self.image = pygame.image.load('oil.png')         self.image = pygame.transform.scale(self.image,(300,300))          self.rect = self.image.get_rect()         self.x = 1600         self.y = 400     def handle_keys(self):         key = pygame.key.get_pressed()         distance = 10         self.x -= distance      def draw(self, surface):         surface.blit(self.image, (self.x, self.y))      def checkcollision(self, oil, sprite):         col = sprite.colliderect(oil)         if col == true:             print ("gameover")   def blit_alpha(target, source, location, opacity):         x = location[0]         y = location[1]         temp = pygame.surface((source.get_width(), source.get_height())).convert()         temp.blit(target, (-x, -y))         temp.blit(source, (0, 0))         temp.set_alpha()                 target.blit(temp, location)  class sprite(object):      def __init__(self):          self.image = pygame.image.load('image1.png')         self.rect = self.image.get_rect()         self.x = 0         self.y = 0     def handle_keys(self):          key = pygame.key.get_pressed()         distance = 10         if key[pygame.k_down]:              self.y += distance         if key[pygame.k_up]:             self.y -= distance         if key[pygame.k_right]:              self.x += distance         if key[pygame.k_left]:              self.x -= distance       def draw(self, surface):          #surface.blit(self.image, (self.x, self.y))         anim.blit(surface, (self.x, self.y))     anim = pyganim.pyganimation([("image1.png", 0.5), ("image2.png", 0.5)])  pygame.init() screen = pygame.display.set_mode((1600, 800)) oil=oil() sprite=sprite()  clock = pygame.time.clock() backgroundo= pygame.image.load('background.png') background = pygame.transform.scale(backgroundo, (1600, 800)) anim.play()  mythread = updatethread() mythread.start() oil.checkcollision(oil.rect,sprite.rect)   while true:      event in pygame.event.get():         if event.type == pygame.quit:             pygame.quit()             running = false      sprite.handle_keys()     oil.handle_keys()      screen.fill((255,255,255))     blit_alpha(screen, background, (0, 0), 128)     sprite.draw(screen)     oil.draw(screen)      pygame.display.update()        clock.tick(30) 

any appreciated.

since oil , sprite classes aren't derived pygame.rect class, believe need testing collisions between them this:

    def checkcollision(self, sprite):         if self.rect.colliderect(sprite.rect):             print ("gameover") 

and should called this:

oil.checkcollision(sprite) 

instead of have:

oil.checkcollision(oil.rect, sprite.rect) 

in object-oriented programming called "has_a" relationship between classes verses "is_a" relationship 1 gets through subclassing or deriving class.

btw, according pep 8 - style guide python code, strongly recommend follow, 2 classnames should have been capitalized, , named oil , sprite respectively.


Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

[C++][SFML 2.2] Strange Performance Issues - Moving Mouse Lowers CPU Usage -

ios - Possible to get UIButton sizeThatFits to work? -