Почему мой спрайт движется с постоянной скоростью - PullRequest
0 голосов
/ 21 апреля 2020

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

это код для добавления куба:

def addCube(self):
    tail = self.body[-1]
    dx, dy = tail.dirnx, tail.dirny

    # check what direction we are currently moving in to determine if we need to add the cube to the left, right, above or below.
    if dx == 1 and dy == 0:
        self.body.append(cube((tail.pos[0] - 1, tail.pos[1])))
    elif dx == -1 and dy == 0:
        self.body.append(cube((tail.pos[0] + 1, tail.pos[1])))
    elif dx == 0 and dy == 1:
        self.body.append(cube((tail.pos[0], tail.pos[1] - 1)))
    elif dx == 0 and dy == -1:
        self.body.append(cube((tail.pos[0], tail.pos[1] + 1)))

    self.body[-1].dirnx = dx
    self.body[-1].dirny = dy

Это все oop внутри основной функции, которая вызывает функцию добавления куба

flag = True
    # STARTING MAIN LOOP
    loop = 0
    while flag:
        #pygame.time.delay(10)  # This will delay the game so it doesn't run too quickly
        clock.tick(60)  # Will ensure our game runs at 10 FPS
        s.move()
        if loop >= 1:
            s.addCube()
        loop += 1

        for x in range(len(s.body)):
            if s.body[x].pos in list(map(lambda z: z.pos, s.body[
                                                          x + 1:])):  # This will check if any of the positions in our body list overlap
                print('Score: ', len(s.body))
                s.reset((10, 10))
                break

1 Ответ

0 голосов
/ 22 апреля 2020

Если вы хотите, чтобы игрок рос из начальной точки, измените

if dx == 1 and dy == 0:
        self.body.append(cube((tail.pos[0] - 1, tail.pos[1])))
    elif dx == -1 and dy == 0:
        self.body.append(cube((tail.pos[0] + 1, tail.pos[1])))
    elif dx == 0 and dy == 1:
        self.body.append(cube((tail.pos[0], tail.pos[1] - 1)))
    elif dx == 0 and dy == -1:
        self.body.append(cube((tail.pos[0], tail.pos[1] + 1)))

на

self.body.append(cube((tail.pos[0], tail.pos[1])))

, чтобы он рос сверху хвоста, когда остальные хвост движется, он остается там, затем движется, как у змеи

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