2016-05-21 5 views
1

В моей игре Battle Ship, я пытаюсь переместить корабль при нажатии клавиш со стрелками. Мой корабль состоит из пятигранного многоугольника и пяти линий, граничащих с ним. Я очистил сеть за способы ее перемещения, но я только нахожу способы сделать прямоугольные и квадратные движения. Ниже мой код (без каких-либо попыток при перемещении судна):Как перенести непрямоугольные объекты в Pygame?

import pygame,sys 
from pygame.locals import * 

pygame.init() 

black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 
green = (0,255,0) 
blue = (0,0,255) 
yellow = (255,242,0) 
ship_body = (33, 117, 243) 

screen = pygame.display.set_mode((500,500)) 
pygame.display.set_caption("Battle Ship") 
background = pygame.image.load("Sky Background.png") 

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


    screen.blit(background, (0,0)) 
    ship = [ 
      pygame.draw.polygon(screen, ship_body,((100,50),(180,95),(320,95),(400,50),(250,35))), 
      pygame.draw.line(screen, black, (100,50),(180,95),1), 
      pygame.draw.line(screen, black, (180,95),(320,95),1), 
      pygame.draw.line(screen, black, (320,95),(400,50),1), 
      pygame.draw.line(screen, black, (400,50),(250,35),1), 
      pygame.draw.line(screen, black, (250,35),(100,50),1), 
      ] 

    pygame.display.update()   
+0

Я уверен, что в Pygame вы можете нарисовать эти линии на новую поверхность, а затем просто разбить ее туда, куда вы хотите. Это лучший метод ИМО. – user161778

ответ

0

Вы можете составить список точек для многоугольника и приращения и уменьшения их:

import pygame,sys 
from pygame.locals import * 

pygame.init() 

black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 
green = (0,255,0) 
blue = (0,0,255) 
yellow = (255,242,0) 
ship_body = (33, 117, 243) 

screen = pygame.display.set_mode((500,500)) 
pygame.display.set_caption("Battle Ship") 
#background = pygame.image.load("Sky Background.png") 

pygame.key.set_repeat(50,50) 

ship_points = [ [100, 50], [180, 95], [320, 95], [400, 50], [250,35] ] 
x = 0 
y = 0 

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

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       x = -1 

      if event.key == pygame.K_RIGHT: 
       x = 1 

      if event.key == pygame.K_UP: 
       y = -1 

      if event.key == pygame.K_DOWN: 
       y = 1 

      for point in ship_points: 
       point[0] += x 
       point[1] += y 

      x=0 
      y=0 

    # screen.blit(background, (0,0)) 
    screen.fill(black) 
    pygame.draw.polygon(screen, ship_body, ship_points) 
    ''' 
    ship = [ 
      pygame.draw.polygon(screen, ship_body,((100,50),(180,95),(320,95),(400,50),(250,35))), 
      pygame.draw.line(screen, black, (100,50),(180,95),1), 
      pygame.draw.line(screen, black, (180,95),(320,95),1), 
      pygame.draw.line(screen, black, (320,95),(400,50),1), 
      pygame.draw.line(screen, black, (400,50),(250,35),1), 
      pygame.draw.line(screen, black, (250,35),(100,50),1), 
      ] 
    ''' 
    pygame.display.update() 
+0

Он работает правильно, за исключением двух вещей. Я хочу, чтобы фон моего неба и моя черная рамка для корабля. Как мне это сделать? – Jetter126

+0

Я прокомментировал линию фонового изображения, так как у меня нет изображения, так что просто раскомментируйте эту строку. Также раскомментируйте, где он близок, и замените заказ, так что заполнение будет первым, а blit - вторым. Чтобы сделать движение с границей, создайте еще один список с точками в нем, как у меня для полигона. Не могу дать лучший ответ сейчас, поскольку я нахожусь на работе и по телефону. – marienbad

+0

Хорошо спасибо. Попробуй сейчас. – Jetter126