Pygame等距网格?

时间:2013-11-17 18:16:25

标签: 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)/2*argument0;
    y = (b + a)/2*argument1;
    return (x,y)

它看起来像这样: Alignment doesn't work!

任何人有任何想法吗?

这是我的代码:

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()

更新: 管理让它像这样工作: Working Isometrics!! 只是有一些深度问题..

1 个答案:

答案 0 :(得分:1)

您正在将像素转换为等轴测视图。据推测,您想要捕捉(等距) tile

将等距x,y乘以(宽度/ 2),(高度/ 2),其中宽度和高度是等距瓷砖尺寸。由于这会从根本上改变比例,你可能想要将两者除以常数;如果你不这样做,只需在屏幕的左上角移动鼠标就会显示出来。

除了等距部分,这正是人们对自上而下的网格所做的。