Я занимаюсь программированием в течение нескольких месяцев и использую разные учебные пособия, чтобы привыкнуть к использованию разных фреймворков, на этот раз это Pygame!Учебное пособие довольно хорошее и на достойном уровне для моих навыков кодирования.Однако, видео немного устарели, поэтому просим у создателя помощи.
Текущий файл кода предназначен для редактора карт, он довольно прост, он просто отображает сетку по умолчанию, позволяет перемещать камеру, удаляетплитки ландшафта, замена плиток ландшафта и сохранение окончательного файла в виде карты, которую основная игра может загрузить вместо рендеринга во время игры.
Код для первоначального создания и рендеринга вплоть до удаления все работает нормально.Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю «F1», чтобы пользователь вводил данные, чтобы выбрать «кисть» (то есть плитку, которую вы хотите разместить).Программа позволит мне удалить столько плиток, сколько я захочу, и я могу выйти очень хорошо.Если я пытаюсь сменить кисть, я могу нажать клавишу F1 и даже ввести свой ввод в этом случае «1», «2» или «3» для травы, камня или воды соответственно.Это когда программа перестает отвечать на запросы.Как только он закрывается, в консоли для Sublime Text 3 (это IDE, которую я использую) я получаю это сообщение:
Tile Removed!
Brush Tag: 3
[Finished in 27.8s with exit code 3489660927]
[shell_cmd: python -u "C:\Users\Jacob\Desktop\pythonRpg2\map_editor.py"]
[dir: C:\Users\Jacob\Desktop\pythonRpg2]
[path: C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32\config\systemprofile\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\; C:\Python35;C:\Program Files (x86)\Brackets\command;C:\Users\Jacob\AppData\Local\Programs\Python\Python37-32\Scripts\;C:\Users\Jacob\AppData\Local\Programs\Python\Python37-32\;C:\Users\Jacob\AppData\Local\Programs\Python\Launcher\;C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32\config\systemprofile\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\; C:\Python35;C:\Program Files (x86)\Brackets\command;C:\Users\Jacob\AppData\Local\Programs\Python\Python35;C:\Users\Jacob\AppData\Local\Programs\Python\Python35\Scripts]
Этот же сбой происходит, когда я пытаюсь также сохранить, то же самое этовремя «F11», затем он запрашивает имя для файла, затем записывает файл во время того, что должно быть частью записи (после ввода пользователя), когда происходит этот сбой.
Несколько других людей в комментариях такжеУ меня была эта проблема, однако, как я уже говорил, видео годовалый, поэтому во времена Youtube оно древнее и невидимое.Также забавный маленький кусочек - у создателя есть ссылка на его источник, который я скопировал на свой компьютер.Я положил его на рабочий стол, где находится папка MY, и попытался запустить его, и у меня возникла та же проблема.
Мое лучшее предположение, поскольку после кода ошибки я получаю действительно длинный путь, что что-то не так.с моим путем для Eiter Python самого или возвышенного.Таким образом, во время сборки каталог, в котором он пытается прочитать / записать файл, защищен и не разрешает доступ.Это всего лишь предположение, поскольку, похоже, такое случается только с некоторыми людьми, и я некоторое время подозревал, что мой python установлен в неправильную папку и затрудняет работу.
import pygame, time, sys, math
from scripts.UltraColor import *
from scripts.textures import *
def export_map(file):
map_data = ""
# Get Map Dimensions
max_x = 0
max_y = 0
for t in tile_data:
if t[0] > max_x:
max_x = t[0]
if t[1] > max_y:
max_y = t[1]
# Save Map Tiles
for tile in tile_data:
map_data = map_data + str(int(tile[0] / Tiles.Size)) + "," + str(int(tile[1] / Tiles.size)) + ":" + tile[2] + "-"
# Save Map Dimensions
map_data = map_data + str(int(max_x / Tiles.Size)) + "," + str(int(max_y / Tiles.Size))
#Write Map Files
with open(file, "w") as mapfile:
mapfile.write(map_data)
pygame.init()
window = pygame.display.set_mode((1280, 720), pygame.HWSURFACE)
pygame.display.set_caption("Map Editor")
clock = pygame.time.Clock()
txt_font = pygame.font.Font("C:\\Windows\\Fonts\\Verdana.ttf", 20)
mouse_pos = 0
mouse_x, mouse_y = 0, 0
map_width, map_height = 100 * Tiles.Size, 100 * Tiles.Size
selector = pygame.Surface((Tiles.Size, Tiles.Size), pygame.HWSURFACE|pygame.SRCALPHA)
selector.fill(Color.WithAlpha(100, Color.CornflowerBlue))
tile_data = []
camera_x, camera_y = 0, 0
camera_move = 0
brush = "1"
# Initialize Default Map
for x in range(0, map_width, Tiles.Size):
for y in range(0, map_height, Tiles.Size):
tile_data.append([x, y, "1"])
isRunning = True
while isRunning:
for event in pygame.event.get():
if event.type == pygame.QUIT:
isRunning = False
if event.type == pygame.KEYDOWN:
# Movement
if event.key == pygame.K_w:
camera_move = 1
if event.key == pygame.K_s:
camera_move = 2
if event.key == pygame.K_a:
camera_move = 3
if event.key == pygame.K_d:
camera_move = 4
# Brushes
if event.key == pygame.K_F4:
brush = "r"
elif event.key == pygame.K_F1:
selection = input("Brush Tag: ")
brush = selection
# Save Map
if event.key == pygame.K_F11:
name = input("Map Name: ")
export_map(name + ".map")
print("Map Saved Successfully!")
elif event.type == pygame.KEYUP:
camera_move = 0
if event.type == pygame.MOUSEMOTION:
mouse_pos = pygame.mouse.get_pos()
mouse_x = math.floor(mouse_pos[0] / Tiles.Size ) * Tiles.Size
mouse_y = math.floor(mouse_pos[1] / Tiles.Size ) * Tiles.Size
if event.type == pygame.MOUSEBUTTONDOWN:
tile = [mouse_x - camera_x, mouse_y - camera_y, brush] # Keep this as a list
# Is a tile placed here already?
found = False
for t in tile_data:
if t[0] == tile[0] and t[1] == tile[1]:
found = True
break
if not found:
if not brush == "r":
tile_data.append(tile)
else:
if brush == "r":
#Remove Tile
for t in tile_data:
if t[0] == tile[0] and t[1] == tile[1]:
tile_data.remove(t)
print("Tile Removed!")
break
else:
print ("A tile has already been placed here!")
# Logic
if camera_move == 1:
camera_y += Tiles.Size
elif camera_move == 2:
camera_y -= Tiles.Size
elif camera_move == 3:
camera_x += Tiles.Size
elif camera_move == 4:
camera_x -= Tiles.Size
# Render Graphics
window.fill(Color.Blue)
# Draw Map
for tile in tile_data:
try:
window.blit(Tiles.Texture_Tags[tile[2]], (tile[0] + camera_x, tile[1] + camera_y))
except:
pass
# Draw Tile Highlighter (Selector)
window.blit(selector, (mouse_x, mouse_y))
pygame.display.update()
clock.tick(60)
pygame.quit()
sys.exit()
Также как маленькийТедбит, он не объясняет это хорошо, и я продолжаю работать в логических кругах, чтобы соединить все.Где именно «кисть» делает вызов для загрузки текстуры в соответствии с «1», «2», «3»?Заранее большое спасибо за помощь, я люблю это место!И если я сделал что-то не так с моим постом, пожалуйста, дайте мне знать, чтобы я мог решить проблему.
РЕДАКТИРОВАТЬ: при запуске кода через IDLE 3.7.0 все работает отлично.Никаких проблем вообще.Однако работа с любой другой IDE приведет к сбою, как это делает Sublime, ИЛИ скажет, что модуль pygame не найден, в том числе IDLE 3.5.0.Я определенно подозреваю, что сделал что-то не так с моим путем, когда я устанавливал Python и различные IDE, с которыми я играл на протяжении многих лет, любая помощь или совет по этому вопросу будут очень благодарны.