如何解决用python绘制交错等距图
我在尝试使用 pygame 创建交错的等距游戏地图时遇到了一些问题。
到目前为止我可以画一个矩形,但我不知道如何旋转它。
代码如下:
from pygame.locals import *
import pygame
green = (40,255,30)
brown = (40,60,90)
grass = 0
dirt = 1
colours = {
grass: green,dirt: brown,}
tilemap = [
[grass,dirt,grass],[dirt,grass,dirt],[grass,grass]
]
TILESIZE = 50
MAPWIDTH = 5
MAPHEIGHT = 5
pygame.init()
disPLAYMAP = pygame.display.set_mode((MAPWIDTH*TILESIZE,MAPHEIGHT*TILESIZE))
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
disPLAYMAP.fill((0,0))
for row in range(MAPWIDTH):
print
for column in range(MAPHEIGHT):
color = colours[tilemap[row][column]]
pygame.draw.rect(disPLAYMAP,color,(column * TILESIZE,row * TILESIZE,TILESIZE,TILESIZE))
pygame.display.update()
结果如下:
我想要看起来像这样的东西:
任何帮助将不胜感激。
谢谢
解决方法
使用 pygame.transform.rotate()
和 pygame.transform.scale()
为每种瓷砖创建等距 pygame.Surface
对象:
isometric_tiles = {}
for key,color in colours.items():
tile_surf = pygame.Surface((TILESIZE,TILESIZE),pygame.SRCALPHA)
tile_surf.fill(color)
tile_surf = pygame.transform.rotate(tile_surf,45)
isometric_size = tile_surf.get_width()
tile_surf = pygame.transform.scale(tile_surf,(isometric_size,isometric_size//2))
isometric_tiles[key] = tile_surf
blit
瓷砖而不是绘制矩形:
for column in range(MAPWIDTH):
for row in range(MAPHEIGHT):
tile_surf = isometric_tiles[tilemap[row][column]]
x = (column + (MAPHEIGHT - row)) * isometric_size // 2
y = 20 + (column + row) * isometric_size // 4
DISPLAYMAP.blit(tile_surf,(x,y))
完整示例:
from pygame.locals import *
import pygame
green = (40,255,30)
brown = (40,60,90)
grass = 0
dirt = 1
colours = {
grass: green,dirt: brown,}
tilemap = [
[grass,dirt,grass],[dirt,grass,dirt],[grass,grass]
]
TILESIZE = 50
MAPWIDTH = 5
MAPHEIGHT = 5
isometric_tiles = {}
for key,isometric_size//2))
isometric_tiles[key] = tile_surf
pygame.init()
DISPLAYMAP = pygame.display.set_mode((MAPWIDTH*TILESIZE*2,MAPHEIGHT*TILESIZE))
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
DISPLAYMAP.fill((0,0))
for column in range(MAPWIDTH):
for row in range(MAPHEIGHT):
tile_surf = isometric_tiles[tilemap[row][column]]
x = (column + (MAPHEIGHT - row)) * isometric_size // 2
y = 20 + (column + row) * isometric_size // 4
DISPLAYMAP.blit(tile_surf,y))
pygame.display.update()
对于交错表示,您必须更改图块的排列:
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
DISPLAYMAP.fill((0,0))
for column in range(MAPWIDTH):
for row in range(MAPHEIGHT):
tile_surf = isometric_tiles[tilemap[row][column]]
x = 20 + column * isometric_size + (row % 2) * isometric_size // 2
y = 20 + row * isometric_size // 4
DISPLAYMAP.blit(tile_surf,y))
pygame.display.update()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。