Math Pygame等距网格?
是否有捕捉到等轴测栅格的算法 这就是我想到的:Math Pygame等距网格?,math,alignment,pygame,isometric,Math,Alignment,Pygame,Isometric,是否有捕捉到等轴测栅格的算法 这就是我想到的: def Iso(argument0,argument1): a = round(pygame.mouse.get_pos()[1]/argument1 - pygame.mouse.get_pos()[0]/argument0); b = round(pygame.mouse.get_pos()[1]/argument1 + pygame.mouse.get_pos()[0]/argument0); x = (b - a)/
def Iso(argument0,argument1):
a = round(pygame.mouse.get_pos()[1]/argument1 - pygame.mouse.get_pos()[0]/argument0);
b = round(pygame.mouse.get_pos()[1]/argument1 + pygame.mouse.get_pos()[0]/argument0);
x = (b - a)/2*argument0;
y = (b + a)/2*argument1;
return (x,y)
看起来是这样的:
有人有什么想法吗
这是我的密码:
import pygame
from pygame.locals import *
pygame.init()
screen=pygame.display.set_mode((640,480))
curs=pygame.image.load('white-0.gif').convert()
curs.set_alpha(100)
g1=pygame.image.load('green-0.gif').convert()
tiles=[]
def Iso(argument0,argument1):
a = round(pygame.mouse.get_pos()[1]/argument1 - pygame.mouse.get_pos()[0]/argument0);
b = round(pygame.mouse.get_pos()[1]/argument1 + pygame.mouse.get_pos()[0]/argument0);
x = (b - a)/2*argument0;
y = (b + a)/2*argument1;
return (x,y)
class Tile(object):
def __init__(self,spr,pos1,pos2):
self.pos=(pos1,pos2)
self.spr=spr
while True:
screen.fill((90,90,0))
mse=pygame.mouse.get_pos()
for e in pygame.event.get():
if e.type==QUIT:
exit()
if e.type==MOUSEBUTTONUP:
if e.button==1:
pos=Iso(16,16)
tiles.append(Tile(g1,pos[0],pos[1]))
pos=Iso(16,16)
screen.blit(curs, (pos[0],pos[1]))
for t in tiles:
screen.blit(t.spr,t.pos)
pygame.display.update()
更新:
设法让它像这样工作:
只是有一些深度问题。您正在将像素转换为等轴测视图。您可能希望捕捉到(等轴测)平铺
将等距x,y乘以(宽度/2),(高度/2),其中宽度和高度是等距瓷砖尺寸。因为这从根本上改变了尺度,你可能想用一个常数来除二者;如果不这样做,只需在屏幕左上角移动鼠标,就会显示一些内容
除了等轴测部分外,这正是自上而下网格所要做的。您正在将像素转换为等轴测视图。您可能希望捕捉到(等轴测)平铺
将等距x,y乘以(宽度/2),(高度/2),其中宽度和高度是等距瓷砖尺寸。因为这从根本上改变了尺度,你可能想用一个常数来除二者;如果不这样做,只需在屏幕左上角移动鼠标,就会显示一些内容
除了等轴测部分外,这正是自上而下网格所要做的。对于“深度”,您只需要使用红色部分的高度。与x、y间距类似,您的深度应使用这些作为“单位高度”进行计算:例如,如果它是8像素高,则平铺可以是深度0或8,两者之间没有任何内容。(至少对于静态瓷砖。)对于“深度”,您只需要使用红色部分的高度。与x、y间距类似,您的深度应使用这些作为“单位高度”进行计算:例如,如果它是8像素高,则平铺可以是深度0或8,两者之间没有任何内容。(至少适用于静态瓷砖。)