Foros del Web » Programando para Internet » Android »

[SOLUCIONADO] "Code .lua" Restar puntos a marcador

Estas en el tema de "Code .lua" Restar puntos a marcador en el foro de Android en Foros del Web. Hola, He creado este script para restar puntos a un juego, y funciona, pero no como yo quiero, me explico: "initialtime" me muestra 500 en ...
  #1 (permalink)  
Antiguo 14/10/2016, 14:09
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 18 años, 8 meses
Puntos: 0
"Code .lua" Restar puntos a marcador

Hola,
He creado este script para restar puntos a un juego, y funciona, pero no como yo quiero, me explico:

"initialtime" me muestra 500 en el display, a este 500 le quiero restar el tiempo transcurrido del contador "clockText" cada vez que "ball" toca "platform". Lo que intento conseguir es que si la pelota toca la plataforma y ha transcurrido 1 segundo, a 500 le descontaría 1 segundo y quedaría 499, pero como el contador sigue en marcha, si han transcurrido 3 segundos, no quiero que le reste 3 segundos a 500, quiero que se lo reste a 499 - 3 = 496, y así sucesivamente:

---SI---------|-----------NO
|
500 -1-------|---------500 -1
|
499 -3-------|---------499 -3
|
496 -5-------|---------497 -5
|
491----------|---------495



Concluyendo, la pelota seguiría botando y cada vez que bote, que reste al resultado de initialtime y no a 500.

Espero haberme explicado bien, por si alguien me puede ayudar.

Podeís probar el scrypt con el simulador de corona sdk:

Código Java:
Ver original
  1. local physics = require "physics"
  2. physics.start()
  3.  
  4. local score = 500
  5.  
  6. -------------------------------------------Initial Time--------------------------------------------------------
  7.  
  8.     local initialtime = display.newText(score, 100, 200, "Helvetica", 40)
  9.  
  10.    
  11. -------------------------------------------Accountant--------------------------------------------------------
  12.  
  13.     local clockText = display.newText("000", 100, 300, "Helvetica", 40)
  14.  
  15.     local secondsLeft = 0 -- secons
  16.     local function updateTime()
  17.     secondsLeft = secondsLeft + 1
  18.     seconds = secondsLeft % 60
  19.     timeDisplay = string.format("%03d", seconds )
  20.     clockText.text = timeDisplay
  21.    
  22. end
  23.    
  24.     countDownTimer = timer.performWithDelay( 1000, updateTime, secondsLeft )
  25.    
  26. -------------------------------------------Collision---------------------------------------------------------
  27.    
  28. local platform = display.newRect( 0, 0, 280, 30 )
  29. platform.surfaceType = "superbounce"
  30. platform.x, platform.y = display.contentCenterX, display.contentCenterY+200
  31. physics.addBody( platform, "static", { bounce=0.0, friction=0.3 } )
  32.  
  33. local ball = display.newCircle( 0, 0, 15 )
  34. ball.x, ball.y = display.contentCenterX+100, display.contentCenterY-40
  35. physics.addBody( ball, "dynamic", { bounce=0.0, radius=20 } )
  36.  
  37. local function onCollision( self, event )
  38.  
  39.    local collideObject = event.other
  40.    if ( collideObject.surfaceType == "superbounce" ) then
  41.       event.contact.bounce = 1
  42.       print(score - clockText.text)
  43.       initialtime.text = score - clockText.text
  44.    end
  45. end
  46.  
  47. ball.collision = onCollision
  48. ball:addEventListener( "collision" )

Saludos..

Última edición por Polu; 16/10/2016 a las 03:09 Razón: para explicarme mejor
  #2 (permalink)  
Antiguo 30/10/2016, 01:26
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: "Code .lua" Restar puntos a marcador

Me respondo a mí mismo, lo he solucionado a medias.
En la colisión de "ball" con "platform", en vez de...
Código Java:
Ver original
  1. initialtime.text = score - clockText.text
...lo he cambiado por:
Código Java:
Ver original
  1. score = score - clockText.text
  2.             initialtime.text = score

Quedaría así:
Código Java:
Ver original
  1. local function onCollision( self, event )
  2.  
  3.    local collideObject = event.other
  4.    if ( collideObject.surfaceType == "superbounce" ) then
  5.       event.contact.bounce = 1
  6.       print(score - clockText.text)
  7.             score = score - clockText.text
  8.             initialtime.text = score
  9.  
  10.    end
  11. end

La pega está en que cada vez que bota la pelota, me resta el doble de lo que marca clockText.
  #3 (permalink)  
Antiguo 31/10/2016, 04:40
Avatar de Polu  
Fecha de Ingreso: febrero-2003
Mensajes: 135
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: "Code .lua" Restar puntos a marcador

Al final lo he resuelto utilizando json, insertando la puntuación en puntoData[1] y recuperándola después:
Código Java:
Ver original
  1. ------------------------------SALVAR PUNTOS EN puntos.json--
  2.  
  3.    local puntoData = {}
  4.          puntoData[1] = initialtime.text - clockText.text
  5.          loadsave.saveTable(puntoData,"puntos.json", system.DocumentsDirectory)
  6.          
  7. ------------RESCATAR PUNTOS DE puntos.json Y MOSTRARLOS EN initialtime.text------
  8.  
  9.          puntoData = loadsave.loadTable("puntos.json", system.DocumentsDirectory)
  10.          
  11. local function puntuacion(event)                                            
  12.                    initialtime.text = puntoData[1]
  13.                end
  14.                    tiempoPuntos = timer.performWithDelay( 100, puntuacion )

Etiquetas: marcador, puntos, restar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:40.