Example #1
0
class Bullet:
    def __init__(self, (from_x, from_y), (to_x, to_y)):
        self.pos = Vector2(from_x, from_y)
        self.destination = Vector2(to_x, to_y)
        self.heading = Vector2.from_points(self.pos, self.destination)
        self.heading.normalize()
        self.speed = 500  #pixels per second
        self.total_distance = 0
        self.sprite = pygame.image.load(
            '../images/bullet_lvl_2.png').convert_alpha()
        w, h = self.sprite.get_size()
        if w > 10:
            ratio = 10. / w
            h = int(h * ratio)
            self.sprite = pygame.transform.scale(self.sprite, (10, h))
        self.rotation = 0
        to_x = to_x - from_x
        to_y = (to_y - from_y) * -1
        if to_x != 0:
            angle = atan(to_y / to_x) / (pi / 180.)
        else:
            angle = -90
        if to_x < 0:
            angle += 180.
        if to_x >= 0 and to_y < 0:
            angle += 360.
        self.rotation = angle - 90
        self.pos += self.heading * 100  #dodaje dlugos lugy
        self.rotated_sprite = pygame.transform.rotate(self.sprite,
                                                      self.rotation)
        w, h = self.rotated_sprite.get_size()
        self.draw_pos = Vector2(self.pos.x - w / 2, self.pos.y - h / 2)
Example #2
0
 def move(self, time_passed_seconds, speed):
     dv = Vector2(self.destination)
     lv = Vector2(self.rect.x, self.rect.y)
     heading = Vector2.from_points(lv, dv)
     heading.normalize()
     d = heading * time_passed_seconds * speed
     self.rect.move_ip(round(d.x), round(d.y))
Example #3
0
 def move(self, time_passed_seconds, speed):
     dv = Vector2(self.destination)
     lv = Vector2(self.rect.x, self.rect.y)
     heading = Vector2.from_points(lv, dv)
     heading.normalize()
     d = heading * time_passed_seconds * speed
     self.rect.move_ip(round(d.x), round(d.y))
Example #4
0
 def start(self) -> None:
     y_direction = randint(0, self.screen_rect.bottom)
     x_direction = randint(0, self.screen_rect.right)
     destination = Vector2(x_direction, y_direction) - (Vector2(5, 5) / 2)
     heading = Vector2.from_points(self.screen_rect.center, destination)
     heading.normalize()
     self.ball.direction = heading
     self.game_state = GameState.RUNNING
     self.started_at = datetime.now()
Example #5
0
 def update(self, delta):
     if self.last_location:
         self.last_vector = Vector2.from_points(self.last_location, (self.rect.x, self.rect.y))
     
     self.rect.move_ip((self.randirx, self.randiry))
     
     center = self.rect.center
     self.image = pygame.transform.rotate(self.original, self.rotation)
     self.rect = self.image.get_rect(center=center)
     self.bounding = self.rect.inflate(-self.rect.width/2.25, -self.rect.height/2.25) 
     
     self.last_location = (self.rect.x, self.rect.y)
Example #6
0
    def _calculate_destination(self, mouse_pos):
        """
        Figure out the destination coords for the bullet, starting from the
        center of the screen through the point the player click, to the edge
        of the screen.
        """
        dx,dy = mouse_pos

        step = Vector2.from_points((WINDOWWIDTH/2,WINDOWHEIGHT/2),
                                   (dx,dy)) * 0.1
        while True:
            if dx > WINDOWWIDTH or dy > WINDOWHEIGHT or dx < 0 or dy < 0:
                break
            dx += step.x
            dy += step.y

        return (dx, dy)
Example #7
0
    def _calculate_destination(self, mouse_pos):
        """
        Figure out the destination coords for the bullet, starting from the
        center of the screen through the point the player click, to the edge
        of the screen.
        """
        dx, dy = mouse_pos

        step = Vector2.from_points((WINDOWWIDTH / 2, WINDOWHEIGHT / 2),
                                   (dx, dy)) * 0.1
        while True:
            if dx > WINDOWWIDTH or dy > WINDOWHEIGHT or dx < 0 or dy < 0:
                break
            dx += step.x
            dy += step.y

        return (dx, dy)
Example #8
0
background = pygame.image.load(background_image_filename).convert()
sprite = pygame.image.load(sprite_image_filename).convert_alpha()
clock = pygame.time.Clock()

position = Vector2(100.0, 100.0)
heading = Vector2()
destination = Vector2()
speed = 200
while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
    
    pressed_mouse = pygame.mouse.get_pressed()
    if pressed_mouse[2]:
        destination = Vector2( *pygame.mouse.get_pos() ) - Vector2( *sprite.get_size() )/2
        vector_to_mouse = Vector2.from_points(position, destination)
        vector_to_mouse.normalize()
        heading = (vector_to_mouse * speed)
    
    if destination.eq(position):
        heading = Vector2()
    screen.blit(background, (0,0))
    screen.blit(sprite, position)

    time_passed = clock.tick(60)
    time_passed_seconds = time_passed / 1000.0
    position += heading * time_passed_seconds
    pygame.display.update()
from vector2 import Vector2
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((640, 480), 0, 32)
sprite = pygame.image.load("images/play.png").convert_alpha()
clock = pygame.time.Clock()
position = Vector2(100.0, 100.0)
speed = 250
heading = Vector2()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            exit()

    destination = Vector2(
        *pygame.mouse.get_pos()) - (Vector2(*sprite.get_size()) / 2)
    heading = Vector2.from_points(position, destination)
    heading.normalize()

    screen.blit(sprite, (int(position.x), int(position.y)))
    time_passed = clock.tick()
    time_passed_seconds = time_passed / 1000.0

    distance_moved = time_passed_seconds * speed
    position += heading * distance_moved
    pygame.display.update()
    time.sleep(0.01)
Example #10
0
 def go_to(self, x, y):
     actual = (self.x, self.y)
     to = (x, y)
     self.direction = Vector.from_points(actual, to)
     self.direction.normalise()
     print self.direction.x
Example #11
0
	def get_dir(self,leaf,pos):
		self.direction=Vector2.from_points(pos,leaf)
		self.magnitude=self.direction.get_magnitude()
		self.direction.normalize()
Example #12
0
position = Vector2(100.0, 100.0)
heading = Vector2()

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            exit()

    screen.blit(background, (0,0))
    screen.blit(sprite, position)

    time_passed = clock.tick(100)
    time_passed_seconds = time_passed / 1000.0

    # 参数前面加*意味着把列表或元组展开
    destination = Vector2( *pygame.mouse.get_pos() ) - Vector2( *sprite.get_size() )
    # 计算鱼儿当前位置到鼠标位置的向量
    vector_to_mouse = Vector2.from_points(position, destination)
    # 向量规格化
    vector_to_mouse.normalize()

    # 这个heading可以看做是鱼的速度,但是由于这样的运算,鱼的速度就不断改变了

    # 在没有到达鼠标时,加速运动,超过以后则减速。因而鱼会在鼠标附近晃动。
    heading = heading + (vector_to_mouse * .6)
    # position=heading + (vector_to_mouse * time_passed_seconds)
    position += heading * time_passed_seconds
    # position +=vector_to_mouse*0.5
    pygame.display.update()