2013-11-17 4 views
1

Есть ли алгоритм привязки к изометрической сетке?Pygame Изометрическая сетка?

Это один я придумал:

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

UPDATE: удалось заставить его работать так: Working Isometrics!! Просто иметь несколько вопросов глубины ..

+1

Для «глубины» вам нужно использовать высоту только красноватой части. Подобно интервалу x, y, ваша глубина должна быть рассчитана с использованием их как «высота единицы»: скажем, если она имеет 8 пикселей, то плитка может быть на глубине 0 или 8, между ними нет ничего. (По крайней мере, для статических плит). – usr2564301

ответ

1

Вы конвертируете пикселей в изометрический вид. Предположительно, вы хотите привязать к (изометрическому) плитка вместо.

Умножьте изометрические x, y на (ширина/2), (высота/2), где ширина и высота - ваши размеры изометрической плитки. Поскольку это радикально изменяет масштаб, вы можете разделить их на константу; если вы этого не сделаете, только перемещение мыши в самом верхнем левом углу экрана заставит что-то появиться.

Помимо изометрической части, это именно то, что можно было бы сделать для сетки сверху вниз.

Смежные вопросы