Problemas con el touch con diferentes objetos creados

Muy buenas, tengo una pequeña duda con la creación de objetos, estoy intentando crear un juego estilo Diner Dash pero tengo un problema con la creación de los clientes.

Tengo una clase llamada customer.lua que es la que tiene toda las variables y funciones de clase, y después tengo la escena llamada restaurant que es la que llama a estos clientes. El código de cada una de las clases es la siguiente:

Clase customer.lua

local customer = {} local customer\_mt = { \_\_index = customer } -- metatable local touched; local waitingWaiter; local status; local plate; local character; local number; function customer.new(number) -- constructor local newCustomer = { touched = false, waitingWaiter = false, status = "cue", plate = "espaguetti", number=number } return setmetatable( newCustomer, customer\_mt ) end function customer:init() character = display.newImageRect('images/character.png', 100, 100) character.x, character.y = 400, display.contentCenterY function touching( event ) if event.phase=="ended" then print("------customer touched") print(self.number) self.touched=true end end character:addEventListener( "touch", touching) end function customer:movement(x, y) character.x, character.y = x, y end --esta función se activa cuando el cliente llega a la mesa y espera a que el camarero le atienda function customer:timeWaitingWaiter() print ('------esperando camamero') self.status= "waiter" print(self.status) end function customer:timeWaitingFood() print ('------esperando comida') self.status= "waiting" print(self.status) end function customer:timeEating() print ('------comiendo') self.status= "eating" print(self.status) end function customer:timePaying() print ('------pagando') self.status= "paying" print(self.status) end return customer

Y para crear cada uno de los clientes a través de un timer hago que se cree un cliente cada 5 segundos:

local restaurantTables = {}

local clientsLvl = 5

local numClients = 1

local currentCustomer =nil

local c = nil

function scene:create( event )

    local sceneGroup = self.view

function updateTimer(event) print(“entro en el timer”) if numClients<clientsLvl then print(“New client”) local customer = require “customer” c = customer.new(numClients) c:init() queue.enqueue© numClients = numClients+1 print("clients: "…numClients) end end local countQueue=timer.performWithDelay(5000, updateTimer, clientsLvl);

Mi problema es que no se como puedo hacer que al clicar sobre un cliente el que se seleccione sea ese y no otro ya que aunque al clicar se ven como clientes distintos, me queda como marcado el último cliente creado.

Habia pensado en hacer una variable que cuando se clique en un cliente este se copie a esta variable, pero como tengo la función de click en la clase customer no se como puedo hacerlo.

Alguna sugerencia?

Muchas gracias por la ayuda!!!

¿Has probado esto?

function customer:init() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character = display.newImageRect('images/character.png', 100, 100) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character.x, character.y = 400, display.contentCenterY &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function touching( event ) local target = event.target &nbsp;&nbsp;&nbsp;&nbsp; if event.phase=="ended" then &nbsp;&nbsp;&nbsp;&nbsp; print("------customer touched") &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; print(target.number) &nbsp;&nbsp;&nbsp;&nbsp; target.touched=true &nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp;&nbsp; character:addEventListener( "touch", touching) &nbsp;&nbsp;&nbsp;&nbsp;end

Te lo digo un poco a ojo, por que yo con metatablas no suelo trabajar para no hacerme un lio, pero parece que creas la tabla customer con un indice por number, así que en teoría deberías poder acceder a customer[number] usando el event.target

function customer:init() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character = display.newImageRect('images/character.png', 100, 100) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character.x, character.y = 400, display.contentCenterY &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function touching( event ) local target = event.target local number = target.number &nbsp;&nbsp;&nbsp;&nbsp; if event.phase=="ended" then &nbsp;&nbsp;&nbsp;&nbsp; print("------customer touched") &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; print(customer[number].number) &nbsp;&nbsp;&nbsp;&nbsp; target.touched=true &nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp;&nbsp; character:addEventListener( "touch", touching) &nbsp;&nbsp;&nbsp;&nbsp;end

Por cierto, tal vez necesites terminar la función touching con 

return true

para que el evento no se propague a otros objetos

Espero que te sirva de ayuda

Muchas gracias y perdón por tardar a responder no pude mirarlo hasta ahora, lo probaré como tu me dices a ver si me funciona :smiley:

¿Has probado esto?

function customer:init() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character = display.newImageRect('images/character.png', 100, 100) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character.x, character.y = 400, display.contentCenterY &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function touching( event ) local target = event.target &nbsp;&nbsp;&nbsp;&nbsp; if event.phase=="ended" then &nbsp;&nbsp;&nbsp;&nbsp; print("------customer touched") &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; print(target.number) &nbsp;&nbsp;&nbsp;&nbsp; target.touched=true &nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp;&nbsp; character:addEventListener( "touch", touching) &nbsp;&nbsp;&nbsp;&nbsp;end

Te lo digo un poco a ojo, por que yo con metatablas no suelo trabajar para no hacerme un lio, pero parece que creas la tabla customer con un indice por number, así que en teoría deberías poder acceder a customer[number] usando el event.target

function customer:init() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character = display.newImageRect('images/character.png', 100, 100) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;character.x, character.y = 400, display.contentCenterY &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function touching( event ) local target = event.target local number = target.number &nbsp;&nbsp;&nbsp;&nbsp; if event.phase=="ended" then &nbsp;&nbsp;&nbsp;&nbsp; print("------customer touched") &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; print(customer[number].number) &nbsp;&nbsp;&nbsp;&nbsp; target.touched=true &nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp;&nbsp; end &nbsp;&nbsp;&nbsp;&nbsp; character:addEventListener( "touch", touching) &nbsp;&nbsp;&nbsp;&nbsp;end

Por cierto, tal vez necesites terminar la función touching con 

return true

para que el evento no se propague a otros objetos

Espero que te sirva de ayuda

Muchas gracias y perdón por tardar a responder no pude mirarlo hasta ahora, lo probaré como tu me dices a ver si me funciona :smiley: