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,两者之间没有任何内容。(至少适用于静态瓷砖。)