Тема: спрайты
Показать сообщение отдельно
Старый 03.08.2008, 19:50   #13
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: спрайты

еще один вариант. Сделал чтобы можно было пикать по спрайтам в одном сурфейсе.
Graphics3D 800, 600, 32, 2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

cam = CreateCamera()
PositionEntity( cam, 0, 0, -10 )

InitSpriteSystem()

addSprite("left",-2)
addSprite("right",2)

Global pickedSprite.Sprite

While Not KeyHit(1)
    mx = MouseX()
    my = MouseY()
    MHleft = MouseHit(1)
    
    If MHleft=1 Then
        pick = CameraPick(cam, mx, my)
        If pick <> 0 Then
            tri = PickedTriangle()
            pickedSprite = Object.Sprite(FindSprite( tri ))
        Else
            pickedSprite = Null
        EndIf
    EndIf
    
    RenderWorld()
    
    If pickedSprite<> Null Then
        CameraProject(cam,  pickedSprite\x, pickedSprite\y, pickedSprite\z)
        Text( ProjectedX(), ProjectedY(), pickedSprite\name )
    EndIf
    
    Flip
Wend

Type Sprite
    Field tri[2], vertex
    Field name$
    Field x#, y#, z#
End Type

Global SSmesh, SSsurf

Function InitSpriteSystem()
    SSmesh = CreateMesh()
    SSsurf = CreateSurface(SSmesh)
    EntityPickMode( SSmesh, 2 )
End Function

Function addSprite(name$, x#=0, y#=0, z#=0)
    Local SS.Sprite = New Sprite
    
    SS\x = x : SS\y = y : SS\z = z
    
    SS\vertex = AddVertex(SSsurf, SS\x-1, SS\y+1, SS\z+0, 0, 0)
    AddVertex(SSsurf, SS\x+1, SS\y+1, SS\z+0, 1, 0)
    AddVertex(SSsurf, SS\x+1, SS\y-1, SS\z+0, 1, 1)
    AddVertex(SSsurf, SS\x-1, SS\y-1, SS\z+0, 0, 1)
    
    SS\tri[0] = AddTriangle(SSsurf, SS\vertex, SS\vertex+1, SS\vertex+2)
    SS\tri[1] = AddTriangle(SSsurf, SS\vertex, SS\vertex+2, SS\vertex+3)
    
    SS\name = name
End Function

Function FindSprite( tri )
    Local SS.Sprite
    
    For SS.Sprite = Each Sprite
        For n = 0 To 1
            If tri = SS\tri[n] Then Return Handle(SS)
        Next
    Next
    
    Return -1
End Function
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (03.08.2008)