如何在Python上移动我创建的对象?

时间:2014-03-31 16:37:45

标签: python string functional-programming pygame shapes

我使用Python创建了一个八边形:

bif="hello.jpg" 

import pygame, sys 
from pygame.locals import * 

points=[(-60,20),(-60,-20),(-20,60),(20... 
colour=(0,191,255) 

pygame.init() 

screen=pygame.display.set_mode((1000,10... 
background=pygame.image.load(bif).conve... 


x,y=0,0 
movex,movey=0,0 


while True: 
    for event in pygame.event.get(): 
        if event.type == QUIT: 
            pygame.quit() 
            sys.exit() 
        if event.type==KEYDOWN: 
            if event.key==K_LEFT: 
                movex=-1 
            elif event.key==K_RIGHT: 
                movex=+1 
            elif event.key==K_UP: 
                movey=-1 
            elif event.key==K_DOWN: 
                movey=+1 
        if event.type==KEYUP: 
            if event.key==K_LEFT: 
                movex=0 
            elif event.key==K_RIGHT: 
                movex=0 
            elif event.key==K_UP: 
                movey=0 
            elif event.key==K_DOWN: 
                movey=0 

        x+=movex 
        y+=movey 

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

    pygame.draw.polygon(screen,colour,points... 

    pygame.display.update() 

我是Python的新用户。我使用Python创建了一个八边形,但它不会移动!

  • 我该如何移动它?
  • 我需要什么编码?
  • 我如何移动我创建的这个八角形?
  • 我做错了什么吗?我做错了什么?
  • 我该如何改进?

1 个答案:

答案 0 :(得分:0)

您已设置了八边形的点数,但movexmovey变量实际上并未改变它们。

作为一个简短的例子,如果你有一组正方形的点,那么:

mysquare = [[10, 10], [20, 10], [20, 20], [10, 20]] #I believe you can use lists and tuples, but in case NOT, switch the nested lists for tuples

...您需要按照x变量的顺序更改movex值。举个例子......

for point in mysquare:
    point[0] += movex
    point[1] += movey

如果您正在使用元组,则必须替换整个元素,而不是在给定索引处递增值。

for pt in mysquare:
    pt = (pt[0] + movex, pt[1] + movey)

- 编辑 -

例如,让我们看一下while循环中的位置。

while True:
    for event in pygame.event.get():
        if event.type == QUIT: 
            pygame.quit() 
            sys.exit()
        if event.type==KEYDOWN:
            if event.key==K_LEFT:
                movex=-1 
            elif event.key==K_RIGHT:
                movex=+1 
            elif event.key==K_UP: 
            movey=-1  
            elif event.key==K_DOWN: 
            movey=+1 
        if event.type==KEYUP: 
            if event.key==K_LEFT: 
            movex=0  
            elif event.key==K_RIGHT: 
            movex=0  
            elif event.key==K_UP: 
            movey=0  
            elif event.key==K_DOWN: 
            movey=0 

    ##at this point, once you know HOW to move the octagon,
    ##now you need to APPLY the changes to the octagon
    for pt in your_octagon: ##or whatever you end up calling it
        pt = (pt[0] + movex, pt[1] + movey)

screen.blit(background,(0,0)) 
pygame.draw.polygon(screen,colour,points... 
pygame.display.update()

我相信这会给你带来理想的效果,虽然我没有测试过。但这个想法是合理的:弄清楚你将如何移动这些点,然后移动它们。