Re: [pygame] Continuous Shooting
Yeah.. I applied the counter logic and it worked for me :) Thanks a lot :) Regards Ankur Aggarwal On Fri, Jan 13, 2012 at 12:02 AM, Julian Marchant wrote: > First off, you need some sort of time management. As it is now, it'll run > at variable speeds depending on how fast the processor is. Use > pygame.time.Clock to limit the frame rate and/or use delta timing. > > As for your problem, all you need is a counter variable. Have the counter > variable start at 0 and decrease it by 1 (or the amount of time passed if > you're using delta timing) each time the loop happens. When the shoot key > is pressed, create a bullet and set the counter to the amount of time you > want to wait for the next bullet. Then, if the shoot key is held down while > the loop variable is 0, create another bullet and reset the counter to the > wait time. > > --- On *Thu, 1/12/12, ANKUR AGGARWAL * wrote: > > > From: ANKUR AGGARWAL > Subject: [pygame] Continuous Shooting > To: pygame-users@seul.org, tu...@python.org > Date: Thursday, January 12, 2012, 12:39 PM > > > Hey > I was making a demo shooting game and problem is that I want > a continuous stream of bullets. As of now on pressing the space key only > one bullet comes out of the plane (I want this to be continuous stream). On > pressing space key again bullet starts from its initial point. My problem > in the code is that I am able to make a single object of Bullet only (thats > why it is throwing single bullet) and unable to find the another logic. > Please help me out. Attaching the files along with this mail. > > import pygame > from pygame.locals import * > import random > > pygame.init() > screen=pygame.display.set_mode((640,480),0,24) > pygame.display.set_caption("Hit The Stone") > > class Plane(pygame.sprite.Sprite): > def __init__(self,bullet): > self.bullet=bullet > pygame.sprite.Sprite.__init__(self) > self.image=pygame.image.load('plane.gif').convert() > self.rect=self.image.get_rect() > self.rect.centerx=random.randint(0,screen.get_width()) > self.distancefromcenter=30 > self.rect.centery=screen.get_height()-self.distancefromcenter > self.dx=2 > self.dy=2 > > def update(self): > pressed=pygame.key.get_pressed() > if pressed[K_DOWN]: > self.rect.centery+=self.dy > elif pressed[K_UP]: > self.rect.centery-=self.dy > elif pressed[K_LEFT]: > self.rect.centerx-=self.dx > elif pressed[K_RIGHT]: > self.rect.centerx+=self.dx > > > if self.rect.bottom>=screen.get_height(): > self.rect.bottom=screen.get_height() > elif self.rect.top<=0: > self.rect.top=0 > > if self.rect.centerx>=screen.get_width()-self.distancefromcenter: > self.rect.centerx=screen.get_width()-self.distancefromcenter > elif self.rect.centerx<=self.distancefromcenter: > self.rect.centerx=self.distancefromcenter > > if pressed[K_SPACE]: > self.bullet.x=self.rect.centerx > self.bullet.y=self.rect.centery > > > > class Bullet(pygame.sprite.Sprite): > def __init__(self): > pygame.sprite.Sprite.__init__(self) > self.image=pygame.image.load('geometrybullet.png').convert_alpha() > self.rect=self.image.get_rect() > self.rect.center=(-100,-100) > self.x=-100 > self.y=-100 > self.dy=5 > > > def update(self): > self.y-=self.dy > self.rect.center=(self.x,self.y) > if self.rect.top<0: > self.x=-100 > self.y=-100 > > > def main(): > background=pygame.Surface(screen.get_size()) > background=background.convert() > screen.blit(background,(0,0)) > bullet=Bullet() > plane=Plane(bullet) > allSprites=pygame.sprite.Group(plane,bullet) > > while 1: > for i in pygame.event.get(): > quitPressed=pygame.key.get_pressed() > if i.type==QUIT or quitPressed[K_q]: > exit() > > allSprites.clear(screen,background) > allSprites.update() > allSprites.draw(screen) > pygame.display.flip() > > > if __name__=='__main__': > main() > > Thanks in advance :) > > Regards > Ankur Aggarwal > > > >
Re: [pygame] Continuous Shooting
First off, you need some sort of time management. As it is now, it'll run at variable speeds depending on how fast the processor is. Use pygame.time.Clock to limit the frame rate and/or use delta timing. As for your problem, all you need is a counter variable. Have the counter variable start at 0 and decrease it by 1 (or the amount of time passed if you're using delta timing) each time the loop happens. When the shoot key is pressed, create a bullet and set the counter to the amount of time you want to wait for the next bullet. Then, if the shoot key is held down while the loop variable is 0, create another bullet and reset the counter to the wait time. --- On Thu, 1/12/12, ANKUR AGGARWAL wrote: From: ANKUR AGGARWAL Subject: [pygame] Continuous Shooting To: pygame-users@seul.org, tu...@python.org Date: Thursday, January 12, 2012, 12:39 PM HeyI was making a demo shooting game and problem is that I want a continuous stream of bullets. As of now on pressing the space key only one bullet comes out of the plane (I want this to be continuous stream). On pressing space key again bullet starts from its initial point. My problem in the code is that I am able to make a single object of Bullet only (thats why it is throwing single bullet) and unable to find the another logic. Please help me out. Attaching the files along with this mail. import pygamefrom pygame.locals import *import random pygame.init()screen=pygame.display.set_mode((640,480),0,24)pygame.display.set_caption("Hit The Stone") class Plane(pygame.sprite.Sprite): def __init__(self,bullet): self.bullet=bullet pygame.sprite.Sprite.__init__(self) self.image=pygame.image.load('plane.gif').convert() self.rect=self.image.get_rect() self.rect.centerx=random.randint(0,screen.get_width()) self.distancefromcenter=30 self.rect.centery=screen.get_height()-self.distancefromcenter self.dx=2 self.dy=2 def update(self): pressed=pygame.key.get_pressed() if pressed[K_DOWN]: self.rect.centery+=self.dy elif pressed[K_UP]: self.rect.centery-=self.dy elif pressed[K_LEFT]: self.rect.centerx-=self.dx elif pressed[K_RIGHT]: self.rect.centerx+=self.dx if self.rect.bottom>=screen.get_height(): self.rect.bottom=screen.get_height() elif self.rect.top<=0: self.rect.top=0 if self.rect.centerx>=screen.get_width()-self.distancefromcenter: self.rect.centerx=screen.get_width()-self.distancefromcenter elif self.rect.centerx<=self.distancefromcenter: self.rect.centerx=self.distancefromcenter if pressed[K_SPACE]: self.bullet.x=self.rect.centerx self.bullet.y=self.rect.centery class Bullet(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image=pygame.image.load('geometrybullet.png').convert_alpha() self.rect=self.image.get_rect() self.rect.center=(-100,-100) self.x=-100 self.y=-100 self.dy=5 def update(self): self.y-=self.dy self.rect.center=(self.x,self.y) if self.rect.top<0: self.x=-100 self.y=-100 def main(): background=pygame.Surface(screen.get_size()) background=background.convert() screen.blit(background,(0,0)) bullet=Bullet() plane=Plane(bullet) allSprites=pygame.sprite.Group(plane,bullet) while 1: for i in pygame.event.get(): quitPressed=pygame.key.get_pressed() if i.type==QUIT or quitPressed[K_q]: exit() allSprites.clear(screen,background) allSprites.update() allSprites.draw(screen) pygame.display.flip() if __name__=='__main__': main() Thanks in advance :) RegardsAnkur Aggarwal
[pygame] Continuous Shooting
Hey I was making a demo shooting game and problem is that I want a continuous stream of bullets. As of now on pressing the space key only one bullet comes out of the plane (I want this to be continuous stream). On pressing space key again bullet starts from its initial point. My problem in the code is that I am able to make a single object of Bullet only (thats why it is throwing single bullet) and unable to find the another logic. Please help me out. Attaching the files along with this mail. import pygame from pygame.locals import * import random pygame.init() screen=pygame.display.set_mode((640,480),0,24) pygame.display.set_caption("Hit The Stone") class Plane(pygame.sprite.Sprite): def __init__(self,bullet): self.bullet=bullet pygame.sprite.Sprite.__init__(self) self.image=pygame.image.load('plane.gif').convert() self.rect=self.image.get_rect() self.rect.centerx=random.randint(0,screen.get_width()) self.distancefromcenter=30 self.rect.centery=screen.get_height()-self.distancefromcenter self.dx=2 self.dy=2 def update(self): pressed=pygame.key.get_pressed() if pressed[K_DOWN]: self.rect.centery+=self.dy elif pressed[K_UP]: self.rect.centery-=self.dy elif pressed[K_LEFT]: self.rect.centerx-=self.dx elif pressed[K_RIGHT]: self.rect.centerx+=self.dx if self.rect.bottom>=screen.get_height(): self.rect.bottom=screen.get_height() elif self.rect.top<=0: self.rect.top=0 if self.rect.centerx>=screen.get_width()-self.distancefromcenter: self.rect.centerx=screen.get_width()-self.distancefromcenter elif self.rect.centerx<=self.distancefromcenter: self.rect.centerx=self.distancefromcenter if pressed[K_SPACE]: self.bullet.x=self.rect.centerx self.bullet.y=self.rect.centery class Bullet(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image=pygame.image.load('geometrybullet.png').convert_alpha() self.rect=self.image.get_rect() self.rect.center=(-100,-100) self.x=-100 self.y=-100 self.dy=5 def update(self): self.y-=self.dy self.rect.center=(self.x,self.y) if self.rect.top<0: self.x=-100 self.y=-100 def main(): background=pygame.Surface(screen.get_size()) background=background.convert() screen.blit(background,(0,0)) bullet=Bullet() plane=Plane(bullet) allSprites=pygame.sprite.Group(plane,bullet) while 1: for i in pygame.event.get(): quitPressed=pygame.key.get_pressed() if i.type==QUIT or quitPressed[K_q]: exit() allSprites.clear(screen,background) allSprites.update() allSprites.draw(screen) pygame.display.flip() if __name__=='__main__': main() Thanks in advance :) Regards Ankur Aggarwal <><>import pygame from pygame.locals import * import random pygame.init() screen=pygame.display.set_mode((640,480),0,24) pygame.display.set_caption("Hit The Stone") class Plane(pygame.sprite.Sprite): def __init__(self,bullet): self.bullet=bullet pygame.sprite.Sprite.__init__(self) self.image=pygame.image.load('plane.gif').convert() self.rect=self.image.get_rect() self.rect.centerx=random.randint(0,screen.get_width()) self.distancefromcenter=30 self.rect.centery=screen.get_height()-self.distancefromcenter self.dx=2 self.dy=2 def update(self): pressed=pygame.key.get_pressed() if pressed[K_DOWN]: self.rect.centery+=self.dy elif pressed[K_UP]: self.rect.centery-=self.dy elif pressed[K_LEFT]: self.rect.centerx-=self.dx elif pressed[K_RIGHT]: self.rect.centerx+=self.dx if self.rect.bottom>=screen.get_height(): self.rect.bottom=screen.get_height() elif self.rect.top<=0: self.rect.top=0 if self.rect.centerx>=screen.get_width()-self.distancefromcenter: self.rect.centerx=screen.get_width()-self.distancefromcenter elif self.rect.centerx<=self.distancefromcenter: self.rect.centerx=self.distancefromcenter if pressed[K_SPACE]: self.bullet.x=self.rect.centerx self.bullet.y=self.rect.centery class Bullet(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image=pygame.image.load('geometrybullet.png').convert_alpha() self.rect=self.image.get_rect() self.rect.center=(-100,-100) self.x=-100 self.y=-100 self.dy=5 def update(self): self.y-=self.dy self.rect.center=(self.x,self.y) if