Перемещение изображения квадратным способом с помощью pygame

Привет, ребята, я пытался переместить изображение мяча квадратным образом на экране с помощью pygame. Я пробовал много раз, но это не работает. Пожалуйста, смотрите мой код ниже.

import time                                              
import pygame, sys
from pygame.locals import *
pygame.init()
clocks = pygame.time.Clock()  
surfaceObject = pygame.display.set_mode((640, 480))  
pygame.display.set_caption('Bounce')   

mousey,mousex = 0,0  
imgx = 10 
imgy = 10 
pixmove = 60
tiger = [2,2]
movement = 'down' 
background = pygame.image.load('bg.jpg').convert()
ball = pygame.image.load('ball.jpg').convert_alpha()
pygame.mixer.music.load('yeah.mp3')
while True: 
  time.sleep(1)                                        
if movement == 'down':                              
    imgx += pixmove                                  
if imgx < 640:                                      
    tiger[0] - tiger[1]                              

elif movement  == 'right':                          
    imgx += pixmove                                  
if imgx < 0:                                      
    movement = 'up'                                  


elif movement == 'up':                              
    imgy -= pixmove                                  
if imgy < 0:                                        
    movement = 'left'                                


elif movement == 'left':                            
    imgx -= pixmove                                  
if imgx < 0:                                        
    movement = 'down'                                


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

surfaceObject.blit(background,(mousex,mousey))      
surfaceObject.blit(ball,(imgx,imgy))                
pygame.mixer.music.play()
pygame.display.update()                              
clocks.tick(50)

Когда я запускаю этот код, мяч движется прямо и не отскакивает назад, когда касается конца.

Моя цель - вращать мяч квадратным образом по экрану. Я попытался изменить переменную pixmove, но это не решило мою проблему.

Надеюсь, вы, ребята, можете мне помочь .. Спасибо заранее


person user3792941    schedule 01.07.2014    source источник
comment
@karl-henrik ты знаешь ответ ..если кто-нибудь знает, просто помогите мне ..   -  person user3792941    schedule 01.07.2014
comment
Ваш отступ очень сломан - в соответствии с тем, как ваш код имеет отступ выше - в вашем цикле while ничего нет. Можете ли вы исправить свою идентификацию, пожалуйста. Я не хочу пытаться угадать, какой должна быть ваша идентификация.   -  person Tony Suffolk 66    schedule 01.07.2014
comment
@TonySuffolk66 у меня нет ошибки намерения, когда я пытался выполнить код, который не показывает никакой ошибки намерения   -  person user3792941    schedule 01.07.2014
comment
Я имею в виду код, вставленный в ваш вопрос - если ваш код работает нормально, то это здорово, но если вы посмотрите на код, который находится в вашем вопросе, отступ явно нарушен - например, ваш цикл while пуст, кроме сна (1) звонок.   -  person Tony Suffolk 66    schedule 01.07.2014
comment
@TonySuffolk66 здесь намерение вообще не имеет значения ... дело в том, что мне просто нужна идея о том, как вращать изображения, например, в квадратной форме, на экране ... я не знаю его алгоритма того, как его повернуть ... если вы знаете, что это просто доля ..:)   -  person user3792941    schedule 01.07.2014
comment
@ ser3792941 - извините, я не согласен - если отступ не правильный, другие люди будут изо всех сил пытаться запустить ваш код и помочь вам. Однако, если все, что вы хотите сделать, это повернуть изображение, посмотрите на pygame.transform pygame.org/docs/ref/transform.html#pygame.transform   -  person Tony Suffolk 66    schedule 01.07.2014
comment
@TonySuffolk66 нет, дело не в вращении   -  person user3792941    schedule 01.07.2014
comment
В таком случае я понятия не имею, что вы хотите - извините.   -  person Tony Suffolk 66    schedule 01.07.2014
comment
@TonySuffolk66 TonySuffolk66 видите, я хочу переместить изображение в прямоугольную форму, не вращаясь. просто переместите изображение в сторону, и если дойдете до границы, то вниз, а если дойдете вниз, то снова прямо ... точно так же, как в квадрате, чтобы переместить изображение .. Я знаю, что это делается путем добавления и удаления пикселей. Но я понятия не имею об этом.   -  person user3792941    schedule 01.07.2014
comment
Вы имеете в виду, что хотите, чтобы он подпрыгнул?   -  person Tony Suffolk 66    schedule 01.07.2014
comment
@TonySuffolk66 точно ..   -  person user3792941    schedule 01.07.2014


Ответы (3)


Ваш отступ полностью сломан, поэтому я не могу сказать, что происходит.

Однако перемещать изображение в квадратной форме легко. Просто создайте Rect, в котором должен двигаться объект, и как только объект покинет Rect, измените направление.

Взгляните на следующий пример:

import pygame
from itertools import cycle

pygame.init() 

screen = pygame.display.set_mode((300, 300)) 
# move inside the screen (or any other Rect)
s_r = screen.get_rect()
player = pygame.Rect((100, 100, 50, 50))
timer = pygame.time.Clock()

speed = 5
up, down, left, right = (0, -speed), (0, speed), (-speed, 0), (speed, 0)
dirs = cycle([up, right, down, left])
dir = next(dirs)

while True:

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

    # move player
    player.move_ip(dir)
    # if it's outside the screen
    if not s_r.contains(player):
        # put it back inside
        player.clamp_ip(s_r)
        # and switch to next direction
        dir = next(dirs)

    screen.fill(pygame.color.Color('Black'))
    pygame.draw.rect(screen, pygame.color.Color('Grey'), player)

    pygame.display.flip()
    timer.tick(25)

введите здесь описание изображения

person sloth    schedule 01.07.2014
comment
.. это помогло мне .. но могу ли я сделать то же самое с этим, загрузив изображение ?? - person user3792941; 01.07.2014
comment
@ user3792941 Конечно. Вместо pygame.draw.rect(screen, pygame.color.Color('Grey'), player) просто сделайте surfaceObject.blit(ball, player) - person sloth; 01.07.2014
comment
@user3792941, используя pygame.transform.rotate. но, пожалуйста, если у вас есть другой вопрос, пожалуйста, напишите еще один вопрос. Утомительно что-то отвечать в комментариях. - person sloth; 01.07.2014
comment
.. все мои проблемы решены, кроме одного. Мне просто нужно знать, как я могу добавить два изображения в окно pygame и заставить его двигаться в другом направлении. - person user3792941; 01.07.2014
comment
@ user3792941 создайте второй Rect rect_2 = pygame.Rect(..) и второй итератор dirs dir2 = next(dirs) и используйте их в основном цикле так же, как и другие. - person sloth; 01.07.2014
comment
@sloth .. пожалуйста, посмотрите редактирование, которое я сделал в своем коде .. оно не показывало 2 изображения .. - person user3792941; 01.07.2014
comment
@user3792941 user3792941 Пожалуйста, задайте другой вопрос вместо того, чтобы редактировать этот. Если вы измените свой код, уже данные ответы не будут иметь смысла. Я откатил вашу правку. - person sloth; 01.07.2014
comment
пожалуйста, смотрите здесь .. я спросил еще один изображение многоугольным способом с помощью pygame"> stackoverflow.com/questions/24510688/ - person user3792941; 01.07.2014

Поскольку мы определили, что на самом деле вы хотите, чтобы мяч отскакивал от краев, посмотрите здесь: Почему мяч не отскакивает назад?

Подводя итог, необходимо следить за направлением движения мяча (с точки зрения его вертикального и горизонтального движения) и менять его при ударе о стену.

person Tony Suffolk 66    schedule 01.07.2014
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - person Daniel Kelley; 01.07.2014
comment
@DanielKelley - если бы код OP был действительным, я бы попытался найти более полное решение. но, как вы можете видеть по комментариям, он отрицал любые утверждения о том, что код плохо отформатирован в том виде, в каком он его предоставил. - person Tony Suffolk 66; 01.07.2014

Вы серьезно хотите исправить отступы, так как это делает ваш код крайне непонятным.

Если вы хотите переместить что-то, например круг, в форме квадрата, это довольно просто:

import pygame, sys
from pygame.locals import *
pygame.init()

DISPLAYSURF = pygame.display.set_mode((1200, 600))

x, y = (100, 100)
dir = 'right'

while True:
        for event in pygame.event.get():
                if event.type == QUIT:
                        pygame.quit()
                        sys.exit()
        DISPLAYSURF.fill((0, 0, 0))
        pygame.draw.circle(DISPLAYSURF, (255, 255, 255), (x, y), 10)
        if dir == 'right':
                x+=14
                if x >= 1100:
                        dir = 'down'
        elif dir == 'down':
                y+=14
                if y >= 500:
                        dir = 'left'
        elif dir == 'left':
                x-=14
                if x <= 100:
                        dir = 'up'
        elif dir == 'up':
                y-=14
                if y <= 100:
                        dir = 'right'
        pygame.display.flip()

введите здесь описание изображения

person ZenOfPython    schedule 01.07.2014
comment
знаете ли вы ответ на эти ...stackoverflow.com/questions/24510688/ - person user3792941; 01.07.2014