是否存在捕捉到等距网格的算法?
这是我提出的那个:
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()
更新: 管理让它像这样工作: 只是有一些深度问题..
答案 0 :(得分:1)
您正在将像素转换为等轴测视图。据推测,您想要捕捉(等距) tile 。
将等距x,y乘以(宽度/ 2),(高度/ 2),其中宽度和高度是等距瓷砖尺寸。由于这会从根本上改变比例,你可能想要将两者除以常数;如果你不这样做,只需在屏幕的左上角移动鼠标就会显示出来。
除了等距部分,这正是人们对自上而下的网格所做的。