function - sumar - Cómo asignar una función en Lua para un número generado aleatoriamente
javascript function parameters default value (2)
Primero guardé 10 imágenes en una matriz (es decir, una tabla) del 1 al 10 como valores clave y creo un número aleatorio usando la función math.random
entre 0-9.
y necesito acceder a la imagen que está almacenada en la matriz por el valor creado por la función aleatoria, y asignar la función táctil solo para el archivo de imagen en particular.
Ex:
Si la función aleatoria crea el número como "5", necesito mover la imagen 5.png que está almacenada en el índice de la matriz como 5., otras imágenes, excepto la 5.png, no deberían usar la función táctil. (Es decir, no están permitidas) mover en la pantalla pero necesita mostrar en la pantalla)
Aquí está mi código:
local myText1 = display.newText(tostring(no1),130, 100, "Jokerman", 36);
myText1:setTextColor(238,18,137)
print("text value1 :",no1)
local myText2 = display.newText(tostring(ran),130, 140, "Jokerman", 36);
myText2:setTextColor(238,18,137)
print("text value2 :",ran)
result = no1 + ran;
print("Result is:" ,result)
local myres = result
print("myresultant string is -->" ,myres)
myres1 = myres % 10;
myres2 = math.floor(myres / 10);
print(myres1)
print(myres2)
--assigning values
dig1 = myres1
dig2 = myres2
function dig1:touch(event)
local t = event.target
-- printTouch(event)
local phase = event.phase
if phase == "began" then
-- Make target the top-most object
local parent = t.parent
parent:insert(t)
display.getCurrentStage():setFocus(t)
-- This flag is to prevent spurious events being sent to the target
t.isFocus = true
-- Store initial position
t.x0 = event.x - t.x
t.y0 = event.y - t.y
-- Make myObject temporarily kinematic
event.target.bodyType = "kinematic"
-- Stop current motion, if any
event.target:setLinearVelocity(0,0)
event.target.angularVelocity = 0
elseif t.isFocus then
if phase == "moved" then
t.x = event.x - t.x0
t.y = event.y - t.y0
elseif phase == "ended" or phase == "cancelled" then
if currentTarget ~= nil and isHighlighted then
-- Move piece to target
transition.to(t,{
time = 150,
x = currentTarget.x,
y = currentTarget.y
})
currentTarget = nil
isHighlighted = false
end
display.getCurrentStage():setFocus(nil)
t.isFocus = false
-- Switch body type back to "static"
event.target.bodyType = "static"
end
end
return true
end
dig1:addEventListener("touch",dig1)
Probablemente necesites una lista de pares de claves para recuperar el índice n. °, o crear una matriz multidimensional (una para mantener el índice y otra para mantener el valor.
Lo siento, todavía no tengo claro el problema. Pero no puede ser claro en los comentarios, por lo que intenta esta respuesta.
Esto es lo que creo que estás tratando de hacer, en un pseudocódigo:
-- init (startup)
function touch(image)
... do something to image ...
end
function noTouch(image)
end -- nothing to touch
imageArray = table of 10 images
each image in imageArray is of "class" Image
for each image in imageArray do
image.touch = noTouch -- a "do nothing" function
end
-- init completed
-- later, this gets called:
function touchRandomImage()
index = random number between 1 and 10 (incl)
moveImage = imageArray[index]
moveImage.touch = yourTouchFunction
end
Más tarde, cuando otro código llame a la imagen: toque () (o image.touch (imagen), lo mismo), solo la imagen seleccionada al azar como arriba utilizará la función táctil especial, todas las demás tendrán la función no hacer nada.
Si se puede llamar a touchRandomImage () varias veces, debe hacer un seguimiento de la imagen "anterior" seleccionada al azar para que pueda restablecer su campo táctil para que sea la función noTouch:
function touchRandomImage()
-- prevIndex is a global, or a field etc
if prevIndex ~= nil then
imageArray[prevIndex].touch = noTouch
prevIndex = nil -- in case exception etc
newIndex = random number between 1 and 10 (incl)
moveImage = imageArray[newIndex]
moveImage.touch = yourTouchFunction
prevIndex = newIndex
end