Poprawiłem twój kod. Myślę że twój błąd polegął na założeniu że w pygame jest klasyczny układ karteziański znany z matematyki czyli dokładnie na środku ekranu jest punkt 0,0. NIestety w pygame jak i wielu bibliotekach graficznych punkt 0,0 jest to lewy górny róg ekranu. Takie założenie niweluje ujemne wartości.
# kod glowny
# kod glowny
# kod glowny
import pygame, sys
from pygame.locals import *
#from Player import Sprite
from pygame.math import Vector2
class Sprite(object):
def __init__(self):
self.pos = Vector2(0,0)
self.vel = Vector2(0,0)
self.acc = Vector2(0,0)
def force(self, force):
self.acc += force
def move(self):
# inputs
pressed = pygame.key.get_pressed()
if pressed[pygame.K_w]:
self.force(Vector2(0,1))
self.pos += Vector2(0,-1)
if pressed[pygame.K_s]:
self.force(Vector2(0,-1))
self.pos += Vector2(0,1)
if pressed[pygame.K_a]:
self.force(Vector2(1,0))
self.pos += Vector2(-1,0)
if pressed[pygame.K_d]:
self.force(Vector2(-1,0))
self.pos += Vector2(1,0)
# physics
self.vel = self.acc
#self.pos += self.vel
self.acc *= 0
def draw(self,screen):
rect = pygame.Rect((self.pos.x,self.pos.y,10,10))
pygame.draw.rect(screen, (100,50,10), rect)
class Main(object):
def __init__(self):
# initialization
pygame.init()
self.screen = pygame.display.set_mode((1000, 700))
self.time = pygame.time.Clock()
self.delta = 0.0
self.player = Sprite()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit(0)
self.delta += self.time.tick() / 1000
while self.delta > 1 / 2.0:
self.sprite_move()
self.delta -= 1 / 2.0
self.screen.fill((0, 0, 0))
self.sprite_move()
self.sprite_draw()
pygame.display.flip()
def sprite_move(self):
self.player.move()
def sprite_draw(self):
self.player.draw(self.screen)
if __name__ == "__main__":
Main()