Показать сообщение отдельно
Старый 16.09.2007, 20:58   #1
jimon
 
Сообщений: n/a
TileMap и матрица трансформации

стандартный TileMap не потдерживает матрицу трансформации
т.е. ему пофиг на SetScale и SetRotation
мне пофиг на SetRotation но далеко не пофиг на SetScale
потому я зделал свою функцию-пародию на TileMap
вот она

Function jTileImage( image:TImage,x#=0,y#=0,frame%=0 )
	Local iframe:TImageFrame=image.Frame(frame)
	If Not iframe Return
	
	Local scx#,scy#
	GetScale(scx,scy)
	
	Local w# = image.width * scx
	Local h# = image.height * scy
	
	Local ox#,oy#,vw%,vh%,vox%,voy%
	GetViewport (vox,voy,vw,vh)
	ox = vox - w + 1
	oy = voy - h + 1
	
	Local px#,py#
	GetOrigin(px,py)
	
	px = x + px - image.handle_x * scx
	py = y + py - image.handle_y * scy
	
	Local fx# = px - Floor(px)
	Local fy# = py - Floor(py)
	Local tx# = Floor(px) - ox
	Local ty# = Floor(py) - oy

	If tx>=0 tx=tx Mod w + ox Else tx=w - -tx Mod w + ox
	If ty>=0 ty=ty Mod h + oy Else ty=h - -ty Mod h + oy

	Local vr# = vox + vw + w
	Local vb# = voy + vh + h

	Local iy# = ty
	While iy <= vb
		Local ix# = tx
		While ix <= vr
			iframe.Draw 0,0,image.width,image.height,ix+fx,iy+fy
			ix = ix + w
		Wend
		iy = iy + h
	Wend

End Function
в принципе добавив еще пару строчек кода - ее мона
сразу вставить в Max2D.mod

но для етого надо написать так чтобы она и с Rotation работала
у меня ща нету времени разбиратся где там на косинус надо
множить ... потому кто тут добрый ? напишите
чтобы размер картинки менялся не только по scx .. но и по углу
тоесть при 0 градусов размер картинки один к одному
при 45 размер увеличивается на sqr(3) / 2
при 90 размер один к одному

в общем в максе еще много чего можно править
 
Ответить с цитированием