def main(): pygame.init() background = (0, 0, 0) screen = pygame.display.set_mode((640, 480), 0, 32) sprite = pygame.image.load('dennis_0.bmp').convert() script = [ 4, 5, 6, 7, 6, 5, 0 ] idx = 0.0 index = 0 clock = pygame.time.Clock() pos = (Vector2(*screen.get_size()) - Vector2(*(80, 80))) / 2 target = pos heading = Vector2() while True: for event in pygame.event.get(): if event.type == QUIT: exit() time_passed = clock.tick() time_passed_seconds = time_passed / 1000.0 screen.fill(background) screen.blit(sprite, pos, (script[index] * 80, 0, 80, 80)) pygame.display.update() if pygame.mouse.get_pressed()[0]: target = Vector2( *pygame.mouse.get_pos() ) - Vector2( *(80, 80) ) / 2 idx += 1 / 4. index = int(idx) % (len(script)-1) params_vector = Vector2.from_points(pos, target) if params_vector.get_length() < 5: idx = 0 index = len(script) - 1 target = pos ## Averagely params_vector.normalize() pos += params_vector * 150 * time_passed_seconds ## kind2 # pos += params_vector * time_passed_seconds ## king3 # params_vector.normalize() # heading = heading + (params_vector * 5) # pos += heading * time_passed_seconds pygame.display.update()
def main(): pygame.init() background = (0, 0, 0) screen = pygame.display.set_mode((640, 480), 0, 32) sprite = pygame.image.load('dennis_0.bmp').convert() script = [4, 5, 6, 7, 6, 5, 0] idx = 0.0 index = 0 clock = pygame.time.Clock() pos = (Vector2(*screen.get_size()) - Vector2(*(80, 80))) / 2 target = pos heading = Vector2() while True: for event in pygame.event.get(): if event.type == QUIT: exit() time_passed = clock.tick() time_passed_seconds = time_passed / 1000.0 screen.fill(background) screen.blit(sprite, pos, (script[index] * 80, 0, 80, 80)) pygame.display.update() if pygame.mouse.get_pressed()[0]: target = Vector2(*pygame.mouse.get_pos()) - Vector2(*(80, 80)) / 2 idx += 1 / 4. index = int(idx) % (len(script) - 1) params_vector = Vector2.from_points(pos, target) if params_vector.get_length() < 5: idx = 0 index = len(script) - 1 target = pos ## Averagely params_vector.normalize() pos += params_vector * 150 * time_passed_seconds ## kind2 # pos += params_vector * time_passed_seconds ## king3 # params_vector.normalize() # heading = heading + (params_vector * 5) # pos += heading * time_passed_seconds pygame.display.update()
def line_segment_intersect(line_a, line_b): """ return True if line_a intersect with line_b else False params should be LineSegment object """ p1 = line_a.a p2 = line_a.b p3 = line_b.a p4 = line_b.b vec_a = Vector2.from_points(p3, p1) vec_b = Vector2.from_points(p3, p4) d1 = cross_product(vec_a, vec_b) vec_a = Vector2.from_points(p3, p2) vec_b = Vector2.from_points(p3, p4) d2 = cross_product(vec_a, vec_b) vec_a = Vector2.from_points(p1, p3) vec_b = Vector2.from_points(p1, p2) d3 = cross_product(vec_a, vec_b) vec_a = Vector2.from_points(p1, p4) vec_b = Vector2.from_points(p1, p2) d4 = cross_product(vec_a, vec_b) # normal intersect if d1 * d2 < 0 and d3 * d4 < 0: return True def on_segment(pi, pj, pk): # pi, pj, pk have to be a tuple as (x, y) return min(pi[0], pj[0]) <= pk[0] <= max(pi[0], pj[0]) \ and min(pi[1], pj[1]) <= pk[1] <= max(pi[1], pj[1]) # abnormal intersect test if d1 == 0 and on_segment(p3, p4, p1): return True if d2 == 0 and on_segment(p3, p4, p2): return True if d3 == 0 and on_segment(p1, p2, p3): return True if d4 == 0 and on_segment(p1, p2, p4): return True return False
def cal_face_direct(start_point, end_point): best_direct = None cos_min = -1 vec_to_target = Vector2.from_points(start_point, end_point) for vec_point, direct in cfg.Direction.VEC_TO_DIRECT.iteritems(): vec = Vector2(vec_point) # cosine law for 2 vectors cos_current = cos_for_vec(vec, vec_to_target) if cos_current > cos_min: cos_min = cos_current best_direct = direct return best_direct
def find_shoot(self, t): isdirection = [0, 0] global playerpos isdirection[0] = int(playerpos[0] / wallwide) isdirection[1] = int(playerpos[1] / wallheight) AB = Vector2.from_points((self.x, self.y), (isdirection[0], isdirection[1])) if (isdirection[0] - self.x + 1) * (isdirection[1] - self.y + 1) != 1: if (isdirection[0] == self.x or isdirection[1] == self.y) and AB.get_normalized() == self.dir: if t > 0: # print 1 self.shoot_tank()
def main(): background_image_path=r'./picture/sushiplate.jpg' sprite_image_path='./picture/fugu.png' SCREEN_SIZE=(640,480) clock=pygame.time.Clock() position=Vector2(100.0,100.0) heading=Vector2() speed=100 pygame.init() screen = pygame.display.set_mode(SCREEN_SIZE,0,32) pygame.display.set_caption("hello world") # font=pygame.font.SysFont('arial',16) # font_height=font.get_linesize() background=pygame.image.load(background_image_path).convert() sprite=pygame.image.load(sprite_image_path).convert_alpha() destination=Vector2(randint(0,640),randint(0,480)) 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() time_passed_seconds=time_passed/1000.0 vector_to_mouse=Vector2.from_points(position,destination) if vector_to_mouse.get_length() > 1: heading=vector_to_mouse.normalize() position+=heading*time_passed_seconds*speed else: destination=Vector2(randint(0,640),randint(0,480)) pygame.display.update()
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() if event.type == MOUSEBUTTONDOWN: destination_x = event.pos[0] - sprite.get_width()/2.0 destination_y = event.pos[1] - sprite.get_height()/2.0 destination = (destination_x, destination_y) heading = Vector2.from_points(position, destination) heading.normalize() screen.blit(background, (0,0)) screen.blit(sprite, (position.x, 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()
screen = pygame.display.set_mode((640,480),0,32) 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() 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() time_passed_seconds = time_passed / 1000.0 destination = Vector2(*pygame.mouse.get_pos()) - Vector2(*sprite.get_size())/2 vector_to_mouse = Vector2.from_points(position, destination) vector_to_mouse .normalize() heading = heading + (vector_to_mouse * .6) position += heading * time_passed_seconds pygame.display.update()
sprite_pos = Vector2(200, 150) sprite_speed = 300. sprite_rotation = 0. sprite_rotation_speed = 360. star_position = Vector2(100.0, 100.0) star_speed = 250. star_heading = Vector2() # while True: for event in pygame.event.get(): if event.type == QUIT: exit() if event.type == MOUSEBUTTONDOWN: star_destination = Vector2(*event.pos) - Vector2(*star.get_size())/2 star_heading = Vector2.from_points(star_position, star_destination) star_heading.normalize() pressed_keys = pygame.key.get_pressed() rotation_direction = 0. movement_direction = 0. if pressed_keys[K_LEFT]: rotation_direction=+1. elif pressed_keys[K_RIGHT]: rotation_direction=-1. if pressed_keys[K_UP]: movement_direction=-1. elif pressed_keys[K_DOWN]: movement_direction = +1. screen.blit(background, (0,0))
sprite = pygame.image.load(sprite_image_filename).convert_alpha() clock = pygame.time.Clock() 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() time_passed_seconds = time_passed / 1000.0 # 参数前面加*意味着把列表或元组展开 desitination = Vector2( *pygame.mouse.get_pos() ) \ - Vector2( *sprite.get_size()) / 2 # 计算鱼儿当前位置到鼠标位置的向量 vector_to_mouse = Vector2.from_points(position, desitination) vector_to_mouse.normalize() # 这个heading可以看做是鱼的速度。在没有到达鼠标时,加速运动,超过以后则减速 heading = heading + (vector_to_mouse * 0.5) position += heading * time_passed_seconds pygame.display.update()
def _heading(self): return Vector2.from_points(self._position, self._destination)
def getText(msg,color=blue): font = pygame.font.SysFont('bitstreamveraserif',20) textsurf = font.render(msg,True,color) # font.render(text,antialias,fg,bg) return textsurf # X coordinate of our sprite fps = 60 # Speed in pixels per seconds speed = 250.0 position = Vector2(100,100) heading = Vector2() while True: for event in pygame.event.get(): if event.type == QUIT or event.type == KEYDOWN and event.key == K_ESCAPE: pygame.quit(); exit() if event.type == MOUSEBUTTONDOWN: destination = Vector2(*event.pos) - Vector2(*spritesurf.get_size())/2.0 heading = Vector2.from_points(position,destination) heading.normalize() screen.blit(bgsurf,(0,0)) screen.blit(spritesurf, position) # time passed(milliseconds) = clock.tick() timepassed = clock.tick(fps)/1000.0 distancemoved = timepassed * speed position += distancemoved * heading pygame.display.update()