Sprite Control Lib

Blitz3D Forums/Blitz3D Programming/Sprite Control Lib

Hi, I was using the sprite control lib in the code archives... however, I am wondering how one would go about implementing collisions and mouse selects with that library?

I have tried to add this into the code:
; create a blank sprite image (from a quad mesh)
Function CreateImage3D(w=1,h=1,par=-1)
	If par=-1 par=spritecam
	Local sprite=CreateMesh(par)
	Local s=CreateSurface(sprite)
	AddVertex s,-1,1,0 ,0,0 : AddVertex s,1,1,0 , 1,0
	AddVertex s,-1,-1,0 ,0,1 : AddVertex s,1,-1,0 , 1,1
	AddTriangle s,0,1,2 : AddTriangle s,3,2,1

        ;Here is what I added to try and get picking working
        EntityPickMode sprite,1
	EntityRadius sprite,w

	EntityFX sprite,1+16
	ResizeImage3D sprite,w,h
	Return sprite
End Function


You can see the rest of this cool library in the codr archives.

create a button type:
type button
  field entity,name$
  field x,y,w,h
end type

function createButton(name$,x,y,image$)
  b.bnutton=new button
  b\name=name
  b\entity=loadimage3d(image)
  b\x=x : b\y=y
  b\w=imagewidth3d(b\entity)
  b\h=imageheight3d(b\entity)
end function


then treat as a normal button as you would in 2d.
mx=mousex()
my=mousey()

if mousehit(1)
  for t.button=each button
    if mx > t\x and mx < t\x+t\w
       if my > t\y and my < t\y+t\h
          ; you've selected a button
          return t\name
       endif
    endif
  next
endif


Not a bad idea, although you loose out on the pixel perfect collision offered by the 2D collision functios. Still it's much better than what I came up with ;)

Any idea if writing the sprite to the backbuffer, then using a copy rect to make an image for the overlap thing would be too slow?

Assuming you're using alpha channeled images you can use crude rectangle-based intersections to do your first order collision detection and then double check by looking up the pixels on the alpha channel portion of the texture.

Very good idea! I like that a lot. *** Stupid newb question warning *** What is the bit comparison I need to make to get the alpha channel on a readpixel?

I call upon the creator of SpriteControl to add SetBuffer3D, LockBuffer3D, Read/WritePixel3D (including alpha channel) ...

Well, I see that's not where the problem is (last post) but now I have another (or a request): How to modify drawimage3d to allow specifiying frameX,frameY individually. Now it has only one frame parameter...

The ImagesOverlap3D() function should help.
Use the overlap1 and overlap2 parameters to allow the sprites to overlap by x amount of pixels before a collision is triggered.

I have not updated SpriteControl for a fair while and it's unlikely to be updated in the future.

By last post I meant my stupid question about SetBuffer3D/Lock/writepixels since I missunderstood - one can just manipulate the texture. The collisions was some other folks questions. My question: DrawImage3D uses one 'frame' parameter but spritecontrol clearly uses frames along both axes, although I don't understand exactly *how* it does it - so that's why I want help modifying DrawImage3D to take x-frame and y-frame parameters...