Home > OS >  i want to change the location of my sprite when i click.... who to do that?
i want to change the location of my sprite when i click.... who to do that?

Time:03-05

from numpy import place
import pygame, sys ,random as ran 
start = True
ref_x = ran.randint(18,387)
ref_y = ran.randint(18,387)
class Player(pygame.sprite.Sprite):
    def __init__(self, pos_x, pos_y):
        super().__init__()
        self.attack_animation = False
        self.sprites_1 = []
        self.sprites_1.append(pygame.image.load('.\crossHair.png'))
        self.sprites_1.append(pygame.image.load('.\crossHair_2.png'))
        self.sprites_1.append(pygame.image.load('.\crossHair_3.png'))
        self.sprites_1.append(pygame.image.load('.\crossHair_4.png'))
        self.sprites_1.append(pygame.image.load('.\crossHair_5.png'))
        self.sprites_1.append(pygame.image.load('.\FIRE.png'))
        self.current_sprite = 0
        self.image = self.sprites_1[self.current_sprite]
        self.image.set_colorkey('white')
        for items in self.sprites_1:
            items.set_colorkey('white')
        self.rect = self.image.get_rect()
        self.rect.topleft = [pos_x,pos_y]
        

    def attack(self):
        self.attack_animation = True
        self.image.set_colorkey('white')
        if mouse[0] 24 >= ref_x and ref_x 4 >= mouse[0] and mouse[1] 24 >= ref_y and ref_y 13 >= mouse[1]:
            get_shot()
        else :
            print(ref_x,'here')

    def update(self,speed):
        self.image.set_colorkey('white')
        mouse = pygame.mouse.get_pos()
        if self.attack_animation == True:
            self.current_sprite  = speed
            if int(self.current_sprite) >= len(self.sprites_1):
                self.current_sprite = 0
                self.attack_animation = False
                print(mouse)
                print('shot')
            self.image = self.sprites_1[int(self.current_sprite)]
            # self.image = self.sprites_1[int(self.current_sprite)]
        self.rect = mouse
class enemy(pygame.sprite.Sprite):
    def __init__(self, pos_x, pos_y):
        super().__init__()
        self.image = pygame.image.load('sp_1.png')
        self.rect = self.image.get_rect()
        self.rect.center = [pos_x, pos_y]
        self.image.set_colorkey((255,255,255))
# General setup
pygame.init()
pygame.mouse.set_visible(0)
clock = pygame.time.Clock()
# Game Screen
screen_width = 400
screen_height = 400
mouse = pygame.mouse.get_pos()
screen = pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption("Sprite Animation")

# Creating the sprites and groups


moving_sprites = pygame.sprite.Group()
crosshair = Player(mouse[0],mouse[1])
enemy_x = ref_x
enemy_y = ref_y
print(enemy_x,enemy_y)
enemy_ = enemy(enemy_x,enemy_y)
moving_sprites.add(enemy_,crosshair)
def get_shot():
    
    moving_sprites.remove(enemy_)
    moving_sprites.add(enemy_)
    moving_sprites.remove(crosshair)
    moving_sprites.add(crosshair)
    pygame.display.flip()
while True:
    # Player.set_pos(*pygame.mouse.get_pos())
    globals()['mouse'] = pygame.mouse.get_pos()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            if pygame.mouse.get_pressed()[0]:
                crosshair.attack()
                # enemy.checkCollision(enemy,crosshair,enemy_)
                # enemy.attack()
                # pygame.sprite.spritecollide(Player,enemy,True)
    screen.fill((120,220,150))
    #this is causing the problem
    # get_hit = pygame.sprite.spritecollide(Player,enemy,True)
    # Drawing
    screen.set_colorkey('white')
    moving_sprites.draw(screen)
    moving_sprites.update(0.06)
    pygame.display.flip()
    clock.tick(120)
    

on function get_shot i want to create my sp_1 at a new place i already tried to change the rect but it didn't work so what can I do to make it work and tell me it get_shot is the best method or not or do i have to create another sprite to make it work also i am a beggener to pygame so tr y to make it easy as possible ...

CodePudding user response:

kill the enemy and spawn a new enemy in a new random position:

enemy_ = enemy(ref_x, ref_y)
moving_sprites.add(enemy_, crosshair)

def get_shot():    
    global enemy_, ref_x, ref_y 

    enemy_.kill()
    ref_x = ran.randint(18,387)
    ref_y = ran.randint(18,387)
    enemy_ = enemy(ref_x, ref_y)
    moving_sprites.add(enemy_)
  • Related