элементы пигмея с разной "скоростью" - PullRequest
0 голосов
/ 05 сентября 2018

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

Мне удалось создать 2 объекта, падающих одновременно, но я не могу заставить их делать это с разной скоростью.

Это первые атрибуты объекта.

thing_startx = random.randrange(0, display_width-100)
thing_starty = -700
thing_speed = 4

Теперь оно падает на

thing_starty += thing_speed 

в каждой итерации цикла while.

Для следующего объекта я просто добавил случайные числа к исходным координатам X и Y, чтобы он занял другое положение. (см. функцию ниже, чтобы создать два прямоугольных объекта, если mult == True)

def things_mult(thingx, thingy, thingw, thingh, color, mult, xopt, yopt, wopt, col2):
    if mult == False:
        pygame.draw.rect(gameDisplay, color, [thingx, thingy, thingw, thingh])
    else:
        pygame.draw.rect(gameDisplay, color, [thingx, thingy, thingw , thingh])
        pygame.draw.rect(gameDisplay, col2, [thingx + xopt, thingy + yopt, thingw + wopt, thingh])

Теперь я предполагаю, что мне просто нужно определить

thingy_new = thing_starty + thing_yopt
thingy_new = thingy_new + thing_speed* someconstant #(to make it faster or slower)

К сожалению, так не получается. Может кто-нибудь объяснить мне, почему я так или иначе лишен этой простой логики?

1 Ответ

0 голосов
/ 08 сентября 2018

Самое простое решение - объединить прямоугольные, скоростные и другие данные в списках, которые представляют ваши игровые объекты, а затем поместить эти объекты в другой список и использовать циклы for для обновления позиций и их рисования.

Вы также можете использовать словари вместо списков, чтобы сделать код более читабельным.

import pygame as pg


pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
BG_COLOR = pg.Color('gray12')
# The objects consist of a pygame.Rect, the y-speed and a color.
objects = [
    [pygame.Rect(150, -20, 64, 30), 5, pg.Color('dodgerblue')],
    [pygame.Rect(350, -20, 64, 30), 3, pg.Color('sienna1')],
    ]

done = False
while not done:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            done = True

    for obj in objects:
        # [0] is the rect, [1] is the y-speed.
        # Move the objects by adding the speed to the rect.y coord.
        obj[0].y += obj[1]

    screen.fill(BG_COLOR)
    # Draw the rects.
    for obj in objects:
        pg.draw.rect(screen, obj[2], obj[0])
    pg.display.flip()
    clock.tick(60)

pg.quit()

Если вы знаете, как работают классы, и ваши объекты также нуждаются в особом поведении, то лучше определите класс для ваших объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...