* 작업의 모든 부분이 튜플 인 경우에도 파이썬은이 인스턴스 중 하나만 있다고 생각하는 것 같습니다. 파이썬에서 벡터 클래스를 만드는 것은 이번이 처음입니다. 이 목표 거리에 도달 할 때까지 내 의도는 위치에 속도 * 벡터의 그것에 단위를 추가하여 내가 화면에 클릭하는 위치에 내 간단한 마우스 이미지를 이동할 수 있습니다 *position + = heading * distance_moved TypeError : 터플 (벡터가 아님)을 터플로 연결하여
수입 수학
클래스 벡터 (객체) :
는#defaults are set at 0.0 for x and y
def __init__(self, x=0.0, y=0.0):
self.x = x
self.y = y
#allows us to return a string for print
def __str__(self):
return "(%s, %s)"%(self.x, self.y)
# from_points generates a vector between 2 pairs of (x,y) coordinates
@classmethod
def from_points(cls, P1, P2):
return cls(P2[0] - P1[0], P2[1] - P1[1])
#calculate magnitude(distance of the line from points a to points b
def get_magnitude(self):
return math.sqrt(self.x**2+self.y**2)
#normalizes the vector (divides it by a magnitude and finds the direction)
def normalize(self):
magnitude = self.get_magnitude()
self.x/= magnitude
self.y/= magnitude
#adds two vectors and returns the results(a new line from start of line ab to end of line bc)
def __add__(self, rhs):
return Vector(self.x +rhs.x, self.y+rhs.y)
#subtracts two vectors
def __sub__(self, rhs):
return Vector(self.x - rhs.x, self.y-rhs.y)
#negates or returns a vector back in the opposite direction
def __neg__(self):
return Vector(-self.x, -self.y)
#multiply the vector (scales its size) multiplying by negative reverses the direction
def __mul__(self, scalar):
return Vector(self.x*scalar, self.y*scalar)
#divides the vector (scales its size down)
def __div__(self, scalar):
return Vector(self.x/scalar, self.y/scalar)
def points(self):
return (self.x, self.y)
#imports
import pygame, sys, Vector
from pygame.locals import *
from Vector import *
#game init
pygame.init()
#screen
screen = pygame.display.set_mode((800,600),0,32)
#images
mouse_file = 'mouse.png'
MOUSE = pygame.image.load(mouse_file).convert_alpha()
#variables
bgcolor = (255,255,255)
position = (100.0, 100.0)
heading = Vector(0, 0)
#clock and speed
clock = pygame.time.Clock()
speed = 250.0
#main game function
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
if event.type == MOUSEBUTTONDOWN:
destination = pygame.mouse.get_pos()
heading = Vector.from_points(position, destination)
heading.normalize()
screen.fill(bgcolor)
screen.blit(MOUSE, position)
time_passed = clock.tick(30.)
time_passed_seconds = time_passed/1000.0
distance_moved = time_passed_seconds*speed
position += heading*distance_moved
pygame.display.update()
당신이 줄 수 점의 튜플로 벡터를 치료하기 위해 필요, 당신은 그렇게 할 수있는 인스턴스 메서드를 만들 수 예를 들어 오류가 발생합니까? – BluePeppers
다음은 잘못된 부분입니다 : if event.type == MOUSEBUTTONDOWN : destination = pygame.mouse.get_pos() heading = Vector.from_points (위치, 대상) heading.normalize() time_passed = clock.tick (30) .) time_passed_seconds = time_passed/1000.0 distance_moved = time_passed_seconds * 속도 위치 + = 제목 *는 – rrcm
내가 그것을 – rrcm