import pygame, sys class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load("char.png").convert() self.rect = self.image.get_rect() def draw(self, screen): self.image = pygame.transform.scale(self.image, (75, 75)) screen.blit(self.image, (self.rect.x, self.rect.y)) def update(self, mlocX, mlocY, n_steps): self.rect.x += (mlocX - self.rect.x) / n_steps self.rect.y += (mlocY - self.rect.y) / n_steps
import pygame, sys import oPC pygame.init() WINDOWSIZE = (1000, 800) BLACK = (0, 0, 0) screen = pygame.display.set_mode((WINDOWSIZE)) pygame.display.set_caption("TTB") screen.fill(BLACK) terrain = pygame.image.load("terrain.jpg").convert() terrainRect = terrain.get_rect() terrain = pygame.transform.scale(terrain, ((WINDOWSIZE))) screen.blit(terrain, terrainRect) oPC = oPC.Player() oPC.draw(screen) pygame.display.flip() running = True n_steps = 80 while running == True: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONDOWN: mlocX, mlocY = pygame.mouse.get_pos() while mlocX != oPC.rect.x and mlocY != oPC.rect.y: oPC.update(mlocX, mlocY, n_steps) if n_steps > 1: screen.fill(BLACK) screen.blit(terrain, terrainRect) n_steps -= 1 oPC.draw(screen) pygame.display.flip() n_steps = 80 pygame.quit() #sys.exit()
I understand the point of not wanting to have another loop running inside of there, but I'm not quite sure how to iterate it another way so it gradually moves towards the mouses target location (without having to click or roll the mouse wheel constantly). I was thinking, would it be more efficient to control the movement by time somehow as opposed to using steps? It works this way now, but the image makes it to different distances at the same amount of time, which isn't exactly great for character movement.