2017-09-05 1 views
0

나는 액션 어드벤처 샌드 박스 비디오 게임을 만들고있다. 그것은 게임 "Terraria"와 아주 비슷합니다. 따라서 블록 배치 및 제거가 필요합니다. 지금은 블록을 파괴하기 위해 기본적으로 클릭 한 곳의 하늘과 동일한 색상의 직사각형을 추가합니다. 그러나, 나는 그것을 원하지 않는다. 나는 그것을 원하지 않으므로 블록을 파괴하면서 이미지를 자유롭게 그릴 수 있습니다. 게임의 세계를 PhotoImages 인 타일 그리드로 변경하기로 결정했습니다. 나는 그것으로 많은 문제를 겪고있다.5000x5000 파이썬 Tkinter 캔버스의 그리드 이미지

DirtImage = PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(61).png') 
GrassImage = PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(62).png') 
TilePlacement = (10, 5000) 
for row in range(5000): 
    c.create_image(TilePlacement, image=DirtImage, tags='Tile') 
    TilePlacement += (20, 0) 

을 내가 알지도 못하는 곳 그리드의 열 심지어 시작에 : 여기 코드 난에 집중하고있다! 어떤 도움을 주시겠습니까?

+0

tkinter는 GUI 기술입니다. 그래픽 무거운 게임을 만드는 데 어려움을 겪을 것입니다. 어떻게 파이 게임이나 (게임) 게임 메이커 스튜디오와 같은 특정 게임을 사용합니까? – Kos

+0

tkinter가 게임을위한 것이라고 생각했을 때이 게임이 개발되기 시작했기 때문에 나는 그것을하고 싶지 않습니다. 불행은 그렇지 않습니다. 그러나 변경하고 사용하기로 결정했다면 모든 것을 다시해야합니다 (다시 실행하기가 쉽습니다). – TyTy

+1

재실행에 대한 좋은 점은 두 번째로 항상 상황이 개선된다는 것입니다. – Kos

답변

1

세계를 참조하기 쉬운 구조로 저장해야합니다. 숫자가 적은 배열이 편리 할 수 ​​있습니다. 좌표계의 부동 소수점을 정수로 매핑하여 현재 타일을 결정할 수 있으므로 좌표계로도 편리합니다.

numpy 배열에 정수 값을 가질 수 있으며 그 정수는 타일에 매핑 될 수 있습니다. 이렇게하면 타일과 상호 작용할 때의 동작은 배열에 저장된 값을 기반으로합니다. 당신이 잡아하려면

x_offset = 4000 
y_offset = 50 
for x in range(100): 
    for y in range(500): 
     sprite = tile_sprites[world[y_offset:y_offset+y, x_offset:x_offset+x]] 
     c.create_image((20*y, 20*x), image=tile_sprites[val], tags='Tile') 

:

tile_names = {0: 'empty', 1: 'dirt', 2: 'grass'} 
tile_sprites = {0: PhotoImage(file = '/path/to/sky'), 
       1: PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(61).png'), 
       2: PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(62).png')} 
world = np.zeros((5000,5000)) 

당신은 세상의 작은 부분에 뷰포트를 제한하기 위해 NumPy와 배열의 조각을 사용하여 같은 뭔가 (창문은 500x100 타일입니다 예를 들어 경우) 당신이 할 수있는 세계의 한 부분

world[y_0:y_0+h, x_0:x_0+w] 
+0

좋아,하지만 "world = np.zeros ((5000,5000))"할 때 "numpy"라는 모듈에는 아무런 속성이 없다 "0"도움말을 다시 표시 하시겠습니까? XD – TyTy

+0

어떤 코드를 사용하고 있습니까? numpy를 가져 왔습니까? github 또는 pastebin 또는 그와 관련하여 링크 할 수 있습니까? – RagingRoosevelt

+0

나는 numpy를 가져 왔습니다. 내가 어떻게 작동하는지보고 싶다고 말한 코드를 시험 중입니다. – TyTy