Detecting if a sprite is touched

I’m working on a simple game as I learn Codea. I’m placing a random number of sprites on the screen. When a sprite is touched, I want it to disappear. I’m looking for a simple way to detect if a sprite is touched. Currently, it looks like I need to write a lot of conditional code. Is there and easy way to handle this in Codea?

Create a class for the sprites with its own touched method that checks the bounding box of the sprite. The bounding box can be determined by the size of the sprite. For example this code drags a vehicle when touched:

Vehicle = class()

function Vehicle:init(startVec)
    -- you can accept and set parameters here
    self.pos = startVec
    self.height = 70
    self.width = 100
end

function Vehicle:draw()
    spriteMode(CENTER)
    sprite("SpaceCute:Health Heart", self.pos.x, self.pos.y,100)
end

function Vehicle:hit(point)
    if point.x > (self.pos.x - self.width) and
       point.x < (self.pos.x + self.width) and
       point.y > (self.pos.y - self.height) and
       point.y < (self.pos.y + self.height) then
        return true
    end        
    return false
end

function Vehicle:touched(road, touch)
    if self:hit( vec2(touch.x, touch.y) ) and
     touch.state == MOVING then
        self.pos = self.pos + vec2( touch.deltaX, touch.deltaY )
    end
end

Doffer,

Thanks for the reply. Very helpful. Got my code working now thanks to your help. :slight_smile:

Can I use this? Will give credit!

@DJMoffinz Heres a version if you don’t want to use a class. Use this for whatever you want.

displayMode(FULLSCREEN)

function setup()  
    fill(255)
    sp=readImage(asset.builtin.Space_Art.Icon)
    spw2=sp.width/2     -- sprite width / 2
    sph2=sp.height/2    -- sprite height / 2
    spx=WIDTH/2         -- sprite x position
    spy=HEIGHT/2        -- sprite y position
end

function draw()
    background(0)
    sprite(sp,spx,spy)
    if hit then
        text("sprite touched",WIDTH/2,HEIGHT/2+200)
    end
    text("touch or slide your finger on/off the sprite",WIDTH/2,HEIGHT-50)
end

function touched(t)
    if t.state==BEGAN or t.state==CHANGED then
        if t.x>spx-spw2 and t.x<spx+spw2 and t.y>spy-sph2 and t.y<spy+sph2 then
            hit=true
        else
            hit=false
        end
    end
    if t.state==ENDED then
        hit=false
    end
end

Thanks!