Почему этот образ не двигается? - PullRequest
0 голосов
/ 22 октября 2018

Насколько я знаю, эта программа должна перемещать изображение, когда я нажимаю клавиши со стрелками / WASD, и я не уверен, почему это не так.Чтобы ускорить чтение, я могу объяснить, что это такое.Я начал с определения нескольких вещей, просто для удобства, затем в цикле while я начал использовать getkey и настроил его так, чтобы при нажатии клавиши со стрелкой экран отображался белым,затем +/- 10 к x / y, затем он должен перерисовать изображения в новых местах, но по какой-то причине он просто не выполняет код после этих операторов If.

import pygame
import sys
import os
import curses
def print_there(x, y, text):
     sys.stdout.write((x, y, text))
     sys.stdout.flush()
pygame.init()
bckgrnd_clr = 'gray95'
x,y=0,0
width = 1280
height = 704
screen = pygame.display.set_mode((width,height))
GameImage = pygame.image.load("Images/stage.png")
Player = pygame.image.load("Images/Knight.png")
Blank = pygame.image.load("Images/Blank.png")
pygame.display.set_caption("Zackarys Game")
screen.blit(GameImage, (0,0))
screen.blit(Player, (y,x))
pygame.display.update()
FPS = 30
clock = pygame.time.Clock()
white = [255 , 255, 255]
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
          if event.key == pygame.K_LEFT or event.key == ord('a'):
               screen.fill(white)
               x = x - 10
               screen.blit(GameImage, (0,0))
               screen.blit(Player, (y,x))
          if event.key == pygame.K_RIGHT or event.key == ord('d'):
               screen.fill(white)
               x = x + 10
               screen.blit(GameImage, (0,0))
               screen.blit(Player, (y,x))
          if event.key == pygame.K_UP or event.key == ord('w'):
               screen.fill(white)
               y = y - 10
               screen.blit(GameImage, (0,0))
               screen.blit(Player, (y,x))
          if event.key == pygame.K_DOWN or event.key == ord('s'):
               screen.fill(white)
               y = y + 10
               screen.blit(GameImage, (0,0))
               screen.blit(Player, (y,x))
          if event.key == pygame.K_ESCAPE:
               pygame.display.quit()
               pygame.quit()
               sys.exit()
               running = False

Пожалуйста, дайте мне знать, как только сможете.

1 Ответ

0 голосов
/ 22 октября 2018

Я исправил твой код.Я не знаю, для чего был предназначен модуль 'curses'.Проблема заключалась в том, что вы обновляли дисплей только один раз (что отключает анимацию).Другая проблема заключалась в том, что вы пытались перетаскивать изображение только при нажатии клавиш событий, что было бы проблемой, если бы вам нужно было регулярно обновлять дисплей.Вот обновленный код (я также исправил ваши x и y).

import pygame
import sys
import os
def print_there(x, y, text):
    sys.stdout.write((x, y, text))
    sys.stdout.flush()
pygame.init()
bckgrnd_clr = 'gray95'
x,y=0,0
width = 1280
height = 704
screen = pygame.display.set_mode((width,height))
GameImage = pygame.image.load("Images/stage.png")
Player = pygame.image.load("Images/Knight.png")
Blank = pygame.image.load("Images/Blank.png")
pygame.display.set_caption("Zackarys Game")
screen.blit(GameImage, (0,0))
screen.blit(Player, (y,x))
FPS = 30
clock = pygame.time.Clock()
white = [255 , 255, 255]
running = True
while running:
    screen.fill(white)
    screen.blit(GameImage, (0,0))
    screen.blit(Player, (x, y))
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
           if event.key == pygame.K_LEFT or event.key == ord('a'):
              x = x - 10
           if event.key == pygame.K_RIGHT or event.key == ord('d'):
              x = x + 10
           if event.key == pygame.K_UP or event.key == ord('w'):
              y = y - 10
           if event.key == pygame.K_DOWN or event.key == ord('s'):
              y = y + 10
           if event.key == pygame.K_ESCAPE:
               pygame.display.quit()
               pygame.quit()
               sys.exit()
               running = False
    pygame.display.update()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...