2017-07-02 23 views
-1

私のコードに問題があります。六角形のポリゴンを描画しようとしていますが、n番目のコードが表示されます。私がEclipseや他のpygame.draw関数を使って試してみると、問題は多角形です。ここに私のコードです。私は、全体のプログラムが正常に動作していると思いますが、問題はここにある:六角形が表示されない

hexagon = Hexagon.hexagon_generator(40,self.rect.x,self.rect.y) 
pygame.draw.polygon(self.image,(0,225,0),list(hexagon),0) 

全体のプログラム:

import pygame 
import random 
import Hexagon 

BLACK = (0, 0, 0) 
WHITE = (255, 255, 255) 
RED = (255, 0, 0) 

class Player(pygame.sprite.Sprite): 
    def __init__(self,x,y): 
     super().__init__() 
     self.image = pygame.Surface([100,100]) 
     self.rect = self.image.get_rect() 
     self.image.fill(WHITE) 
     self.image.set_colorkey(WHITE) 
     self.rect.x = x 
     self.rect.y = y 
     hexagon = Hexagon.hexagon_generator(40,self.rect.x,self.rect.y) 
     pygame.draw.polygon(self.image,(0,225,0),list(hexagon),0) 

     self.velocity_y = 0 
     self.velocity_x = 0 

    def move(self, x, y): 
     self.velocity_x += x 
     self.velocity_y += y 

    def update(self): 
     self.rect.x += self.velocity_x 
     self.rect.y += self.velocity_y 
     if self.rect.x >785: 
      self.rect.x =785 
     elif self.rect.x <0: 
      self.rect.x =0 
     elif self.rect.y > 585: 
      self.rect.y = 585 
     elif self.rect.y < 0: 
      self.rect.y = 0 
     elif self.rect.x<0 and self.rect.y < 0: 
      self.rect.x = 0 
      self.rect.y = 0 

pygame.init() 
screen_width = 800 
screen_height = 600 
screen = pygame.display.set_mode([screen_width, screen_height]) 
all_sprites_list = pygame.sprite.Group() 

player = Player(200,200) 
all_sprites_list.add(player) 
done = False 
clock = pygame.time.Clock() 

while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_DOWN: 
       player.move(0,5) 
      if event.key == pygame.K_UP: 
       player.move(0, -5) 
      if event.key == pygame.K_LEFT: 
       player.move(-5, 0) 
      if event.key == pygame.K_RIGHT: 
       player.move(5, 0) 
     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_DOWN: 
       player.move(0, -5) 
      if event.key == pygame.K_UP: 
       player.move(0, 5) 
      if event.key == pygame.K_LEFT: 
       player.move(5, 0) 
      if event.key == pygame.K_RIGHT: 
       player.move(-5, 0) 

    screen.fill(WHITE) 
    all_sprites_list.update() 

    all_sprites_list.draw(screen) 

    pygame.display.flip() 
    clock.tick(60) 

pygame.quit() 

六角モジュールがあります:

import math 

def hexagon_generator(edge_length, x,y): 
    for angle in range(0, 360, 60): 
     x += math.cos(math.radians(angle)) * edge_length 
     y += math.sin(math.radians(angle)) * edge_length 
     yield x, y 
+1

、あなたはまだ削減するようにしてくださいコードを[最小で完全で検証可能な例](https://stackoverflow.com/help/mcve)に変換します。 2つのモジュールを結合することもできます。 – skrx

答えて

0

あなたがhexagon_generator値を印刷する場合そのポイントが画像の外にあることがわかります(サイズは100×100ピクセルです)。

[(240.0, 200.0), (260.0, 234.64101615137753), (240.0, 269.28203230275506), (200.0, 269.28203230275506), (179.99999999999997, 234.64101615137753), (199.99999999999997, 200.0)] 

プレーヤーのワールド座標を開始値x, yとして使用しないでください。六角を中央に配置する場合は、あなただけの発電機への画像の半分のエッジ長を渡し、xyに追加することができます:私はちょうど書式設定を修正した

def hexagon_generator(edge_length): 
    for angle in range(0, 360, 60): 
     x = math.cos(math.radians(angle)) * edge_length + edge_length 
     y = math.sin(math.radians(angle)) * edge_length + edge_length 
     yield x, y 
関連する問題