[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Math.Vector2()



Hi,

the issue to track this is here:
    https://bitbucket.org/pygame/pygame/issue/172

The patch has been applied, but we still need unit tests.

regards,

ps. Lorenz, there should be an invitation for the pygame hg repository in your email somewhere.




On Tue, Aug 13, 2013 at 3:42 PM, Lorenz Quack <don@xxxxxxxxxxxxxxxxx> wrote:
Hi List,

I think it's a bug in the lib.
The inplace operators didn't increment the reference count.
But according to the Docs [1] they should return a "New reference".
patch included.

cheers,
Lorenz

[1] http://docs.python.org/2/c-api/number.html#PyNumber_InPlaceAdd



On 07/12/2013 02:18 AM, Aikiman wrote:
heres the code, just one class and main. Ive commented out the problem code
so you need to uncomment to see the errors. Like I said anything where
vec*=vec or vec+=vec causes malloc errors. Thanks for helping.

import pygame, math, random

pygame.init()

class Circle(pygame.sprite.Sprite):
     def __init__(self, screen):
         pygame.sprite.Sprite.__init__(self)
         self.screen = screen
         self.position =
pygame.math.Vector2(random.randrange(20,self.screen.get_width()),
self.screen.get_height()/3)
         self.velocity = pygame.math.Vector2(0.0, 0.0)
         self.acceleration = pygame.math.Vector2(0.0, 0.1)
         self.netForce =  pygame.math.Vector2(0.0, 0.0)
         self.x = random.randrange(20,self.screen.get_width())
         self.y = self.screen.get_height()/2
         self.radius = random.randrange(5,30)
         self.image = pygame.Surface((self.radius*2,self.radius*2))
         self.image.set_colorkey((0,0,0))
         self.image.set_alpha(120)
         self.mass = self.radius/15.0
         pygame.draw.circle(self.image, (175,255,0),
(self.radius,self.radius), self.radius)
         self.image = self.image.convert_alpha()
         self.rect = self.image.get_rect()
         self.rect.center = self.position

     def update(self):
         self.calcPos()
         self.checkBounds()
         self.rect.center = self.position
         #self.netForce *= 0.0


     def calcPos(self):
         self.acceleration = self.netForce
         #self.velocity += self.acceleration
         #self.position += self.velocity


     def applyForce(self, force):
         force /self.mass
         #self.netForce += force

     def checkBounds(self):
         if self.position[1] > self.screen.get_height():
             self.acceleration[1] *= -1.0
             self.position[1] = self.screen.get_height()
         if self.position[0] > self.screen.get_width():
             self.acceleration[0] *= -1.0
             self.position[0] = self.screen.get_width()
         if self.position[1] < 0:
             self.acceleration[1] *= -1.0
         if self.position[0] < 0:
             self.acceleration[0] *= -1.0

def main():
     screen = pygame.display.set_mode((600,400))
     background = "">size()))
     background.fill((150,150,150))
     background = "">
     circleGRP = pygame.sprite.Group() #Add balls
     for x in range(10):
         circleGRP.add(Circle(screen))

     wind = pygame.math.Vector2(1.0, 0)
     gravity = pygame.math.Vector2(0, 1.0)

     clock = pygame.time.Clock()
     mainLoop = True

     while mainLoop:
         clock.tick(30) #Clock
         for event in pygame.event.get(): #Key events
             if event.type == pygame.QUIT:
                 mainLoop = False
             elif event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_ESCAPE:
                     mainLoop = False
             elif event.type == pygame.MOUSEBUTTONDOWN: #Add wind
                 if pygame.mouse.get_pressed()[0]:
                     for circle in circleGRP:
                         circle.applyForce(wind)

#----------------------------------------------------------------------------
         for circle in circleGRP: #Add gravity
             gravity = gravity * circle.mass
             circle.applyForce(gravity)
             #pass

             #circleX = circle.dx * -1 #Add drag
             #circleY = circle.dy * -1
             #drag = (circleX/80* circle.mass* (circle.radius/5), circleY/80*
circle.mass* (circle.radius/5))
             #circle.applyForce(drag)

#----------------------------------------------------------------------------
         circleGRP.update()
         screen.blit(background, (0,0))
         circleGRP.draw(screen)
         pygame.display.flip()

     pygame.quit()

if __name__ == "__main__":
     main()




--
View this message in context: http://pygame-users.25799.x6.nabble.com/pygame-Math-Vector2-tp798p801.html
Sent from the pygame-users mailing list archive at Nabble.com.