Informacion para hacer highscore?

Hi Brent, Could you help me to set up the high socre for a game please?

¿Estáis buscando la forma de hacer un highscore local o accesible a través de un servidor por internet? Nosotros hemos terminado hace poco el sistema de gestión de puntuaciones para el juego que estamos terminando. Para la creación de la tabla local, resulta bastante sencillo, usando la librería sqlite:

--Include sqlite require "sqlite3" --Open data.db.  If the file doesn't exist it will be created local path = system.pathForFile("data.db", system.DocumentsDirectory) db = sqlite3.open( path )  

Entonces creamos las tablas que necesitamos con sus respectivos campos : 

local tablesetup = [[CREATE TABLE IF NOT EXISTS timeAttack (id INTEGER PRIMARY KEY, name, score DOUBLE);]] db:exec( tablesetup ) tablesetup = [[CREATE TABLE IF NOT EXISTS original (id INTEGER PRIMARY KEY, name, score DOUBLE);]] db:exec( tablesetup )

y le añadimos algunos registros n_n (por defecto, esto podría ser opcional)

local testvalue = {} testvalue[1] = 'Juan' testvalue[2] = 'Cristina' testvalue[3] = 'Albert' testvalue[4] = 'Nacho' testvalue[5] = 'Peri' testvalue[6] = 'Xevi G.' testvalue[7] = 'Paytopwn' testvalue[8] = 'Dreams' testvalue[9] = 'Beta' testvalue[10] = 'Games' local tablefill =[[INSERT INTO timeAttack VALUES (1, ']]..testvalue[1]..[[', 10001);]] local tablefill2 =[[INSERT INTO timeAttack VALUES (2, ']]..testvalue[2]..[[', 9000);]] local tablefill3 =[[INSERT INTO timeAttack VALUES (3, ']]..testvalue[3]..[[', 8000);]] local tablefill4 =[[INSERT INTO timeAttack VALUES (4, ']]..testvalue[4]..[[', 7000);]] local tablefill5 =[[INSERT INTO timeAttack VALUES (5, ']]..testvalue[5]..[[', 6000);]] local tablefill6 =[[INSERT INTO timeAttack VALUES (6, ']]..testvalue[6]..[[', 5000);]] local tablefill7 =[[INSERT INTO timeAttack VALUES (7, ']]..testvalue[7]..[[', 4000);]] local tablefill8 =[[INSERT INTO timeAttack VALUES (8, ']]..testvalue[8]..[[', 3000);]] local tablefill9 =[[INSERT INTO timeAttack VALUES (9, ']]..testvalue[9]..[[', 2000);]] local tablefill10 =[[INSERT INTO timeAttack VALUES (10, ']]..testvalue[10]..[[', 1000);]] db:exec( tablefill ) db:exec( tablefill2 ) db:exec( tablefill3 ) db:exec( tablefill4 ) db:exec( tablefill5 ) db:exec( tablefill6 ) db:exec( tablefill7 ) db:exec( tablefill8 ) db:exec( tablefill9 ) db:exec( tablefill10 )

Por otro lado, para crear la tabla de datos globales, tenemos que usar un fichero php a modo de adaptador para poder acceder al servidor (realizando las comprobaciones de seguridad pertinentes). 

Saludos.

Hola paytopwn:

Gracias por este mensaje. Tengo una idea de lo que me dices, pero la verdad, no le entiendo muy bien.

No tendrias algun video en YOUTUBE, que explique paso a paso como hacerlo?

quiero disparar una balita y que destruya una imagen, cada imagen vale 100 puntos, y que haya un lugar que vaya sumando cada imagen que la balita destruye, al final del juego dice :Your Highscore is:_______ la suma de todas las balitas destruidas.

No se como explicarlo muy bien, porque soy nuevo en esto, pero te agradezco toda la ayuda y el tiempo en apoyarme con esto.

Victor

Hola Victor, 

En cuanto a la música que comentas, si te fijas en el código, cada vez que aprietas una tecla vuelves a instanciar el sonido. Creo que una buena práctica sería realizar la carga de todos los ficheros de sonido al inicio y luego ir haciendo los “play” del sonido que necesites en cada momento.

¡Saludos!

Gracias paytopwn:

Tengo tantas cosas en la cabeza, es la primera vez que veo – n_n – ya lo habia visto an otros codigos, lo mismo que – for i = 1 y cosas asi, pero la verdad ES MUCHO!

Mi cabeza ya me duele…

Quiere de verdad entenderle, pero no se como. Lo que veo es que la forma de ensenar de todos es como pensando que yo ya se, o que la persona que va a leer la respuesta ya sabe, pero la verdad es que NO SE!

Por ejemplo, me dijiste que para hacer que la imagen se adapte, use esto –


bg = display.newImage(“images/background/vertical/background_v.png”, 0,0, true)
        bg:scale(display.contentWidth/bg.contentWidth, display.contentHeight/bg.contentHeight)
        bg.x = display.contentWidth/2
        bg.y = display.contentHeight/2
        exerciseGroup:insert( bg )

y obtengo el n_n


Pero no le entiendo nada!

Puse ese codigo en mi EDITOR y sale esto

Attempt to index global ‘exerciseGroup’ (a nil value)

espero que me sepa explicar lo que digo, cuando tengo una pregunta, leo respuestas y todas ASUMEN QUE YO YA SE, y me dicen solo poquito, pensando que con ese poquito yo ya debo de saber o entender la respuesta, PERO NO SE!

No se si sepas musica, yo se musica muy bien, si me preguntas que cual es la escala de Fa, te digo, o solo fijate en el cuarto grado, y listo ahi esta el bemol…

y si no sabes musica te quedaste igual…

Asi estoy YO.

Que no hay una explicacion desde el principio en video y poquito a poquito explicando todo, punto por punto.

Gracias por tu ayuda

Si vas a mi web-site y ves CORONA SDK tutorials, asi como eso quiero encontrar un lugar

mi we-site es xyapps.com

Victor

Hola Victor: 

Nadie nace aprendido, y hay cosas que cuestan mucho de aprender (¡Nadie dijo que la programación fuera fácil :slight_smile: ! ) 

Algo que hay que aprender es a saber distinguir los diferentes errores que nos “escupe” la consola: 

Attempt to index global 'exerciseGroup' (a nil value)

Aquí se queja de que no existe el grupo “exerciseGroup”. Es una buena práctica poner los conjuntos de objetos dentro de un grupo en cuanto se instancian en pantalla creando un grupo que los vaya conteniendo, así al cambiar de escena es muchísimo más fácil gestionar todos los objetos del grupo (por ejemplo descargándolos de memoria). 

Un ejemplo para crear un grupo sería:

    local exerciseGroup = display.newGroup()

Si me vas comentando tus dudas, intentaré resolverlas :) 

¡Hasta ahora! 

Hi paytopwn:

No se si puedas ver este lugar aqui estan 3 videos con las dudas y preguntas que tengo. Gracias

http://forums.coronalabs.com/topic/34188-how-to-change-scenes/

Hola Victor,

Lo primero que tendrías que valorar es la forma en la que quieres guardar tu puntuación, en una base de datos (Suele ser la mejor opción, ya que es muy escalable) o en variables (menos escalable, suele ser la peor opción pero la más fácil de implementar). 

Entiendo que cada vez que impacta la bala con la imagen tienes una variable local en la escena que suma 100 puntos. La idea es que cuando termines la partida deberías guardar este valor para poder compararlo con los demás que se han introducido. ¿Cuántos highscores vas a permitir guardar en total? A lo mejor habría que partir de cómo quieres que se vean los highscores, no es lo mismo crear un registro infinito de highscores que, por decir algo, poner sólo los 10 mejores. 

Para probar, si quieres, podemos empezar intentando guardar dentro de preferences una variable que sea “highscore”. Si no conoces cómo funcionan los preference, te cuento brevemente que son una manera de guardar información. 

Primero en la parte de carga de librerías,dentro del main.lua, deberías cargar las preferences :

preference = require "preference"  

La idea sería que en el main.lua crearas el fichero, si no existiera de highscore : 

preference.save{ highscore= 0} --preference highscore  

Aquí crearíamos una variable dentro del registro del programa llamado “highscore” que nos serviría para guardar la puntuación máxima. 

Ahora miraríamos la parte del juego - el fichero “.lua” donde está toda la lógica (si pudieras poner el código que tienes, sería mucho más fácil :wink:

En el fichero del juego deberías tener una variable local que servirá para contar todos los objetos que están siendo destruidos por la balita - por ejemplo score 

local preference = preference -- cargamos fichero de preferencias local score -- puntuacion actual del jugador  

Ahora bien, el pseudocódigo de cómo tendría que funcionar seria el siguiente:  

si (balita colisiona con objeto) entonces

     score = score + 100

fsi

Y una vez termine el juego, podrías cargar un texto con la frase que querías :

textoScore = display.newText("",0,0,"Helvetica",50) textoScore:setTextColor(0,0,0) textoScore:setReferencePoint(display.CenterReferencePoint) textoScore.text="Your Highscore is: "..score  

Entonces podrías utilizar los preference que hemos cargado al inicio (perdón por complicarlo tanto :wink: ) para comprobar si es un highscore absoluto (es decir que nunca antes se ha llegado a esta puntuación): 

maxScore = preference.getValue("highscore") -- guardamos la puntuación máxima en maxScore if score \> maxScore then -- miramos si la puntuación que hemos realizado es superior al máximo guardado       --¡felicidades! ¡tienes un nuevo highscore!       preference.save{ highscore=score} end  

No sé si me he excedido por aquí o he complicado más las cosas, de todos modos si pones parte de tu código podemos ir trabajándolo :) 

¡Saludos!

Hola paytopwn:

En este momento son las 2:23 pm aqui en Murrieta, California USA. Empiezo a trabajar a las 3:00, soy maestro de musica, y tengo mucha hambre, no he comido nada, tu gustas?

voy a ir a comer y empiezo a trabajar.

Te platico esto porque no me alcanza el tiempo, quisiera no tener que trabajra y dedicarme TODO el dia a esto, pero ni modo.

manana voy a revisar el codigo que me mandaste, mas o menos le entiendo un poco, pero quiero ver si lo puedo poner en mi app.

y por supuesto que te mando la copia del projecto que tengo.

GRACIAS POR TODA LA AYUDA Y TODO TU TIEMPO. manana te mando mas informacion y preguntas, por lo pronto

DONDE PUEDO COPIAR el file de [preference = require “preference”]

para poderlo poner en mi carpeta, junto con el de main.lua

Gracias

Victor

Hola paytopwn:

Una preguntita, como le hago para que mi APP se vea solamente en “Landscape”?

tengo un background de

 width = 1024,
        height = 748,

– config.lua – EN MI CONFIG.LUA tengo esto

application =
{
    content =
    {
        width = 1024,
        height = 748,
        scale = “zoomEven” – zoom to fill screen, possibly cropping edges
    },
}

Y en el main.lua tengo esto

– Destroy The Notes
– Copyright 2013 by xyapps.com

-----------------------------------------------------------MAIN BACKGROUND-------
local background = display.newImage (“background.png”)

pero la imagen sale cortada, no se ve bien, y siempre sale en “Portrait” mode, le tengo que hacer

– Hardware

–Rotate Left

Pero de todos modos sale cortada.

Gracias por tu ayuda.

Se me olvidaba,

Hay manera de mandarte jpeg, o fotos, para que veas como voy?

Hola paytopwn:

son las 7:51 pm tuve una chancita.

Ya logre poner la orientacion en landscape, y ya puedo tocar las notas en el teclado. LO que quiero hacer es un piano que al tocar las teclas se oiga el sonido.

A la mejor no es la mejor manera, pero hasta ahorita es la unica que se.

este es mi codigo:

– Destroy The Notes
– Copyright 2013 by xyapps.com

-----------------------------------------------------------MAIN BACKGROUND-------
local mainOr = “landscapeRight”

local background = display.newImage (“background.png”)
local GGSound = require (“GGSound”)
audio.reserveChannels (3)

--------------------------------------------------------------CREATE A BUTTON--------F3–
local note1 = display.newImage( “note1.png” )
    note1:setReferencePoint(display.BottomLeftReferencePoint)
    note1.x = 58
    note1.y = 701
-----------------------------------------------CREATE A FUNCTION TO MAKE THE BUTTON WORK–
function note1:tap( event )
    
    local sound = GGSound:new {1, 2, 3}
    sound:add (“note1.wav”, “note1”)
    sound:setVolume (0.8)
    sound:play (“note1”)    
end
---------------------------------------------------------------CALL THE FUNCTION----------
note1:addEventListener( “tap”, note1 )

--------------------------------------------------------------CREATE A BUTTON------F#3----
local noteB1 = display.newImage( “noteB1.png” )
    noteB1:setReferencePoint(display.BottomLeftReferencePoint)
    noteB1.x = 80
    noteB1.y = 610
-----------------------------------------------CREATE A FUNCTION TO MAKE THE BUTTON WORK–
function noteB1:tap( event )
    
    local sound = GGSound:new {1, 2, 3}
    sound:add (“noteB1.wav”, “noteB1”)
    sound:setVolume (0.8)
    sound:play (“noteB1”)    
end
---------------------------------------------------------------CALL THE FUNCTION----------
noteB1:addEventListener( “tap”, noteB1 )

--------------------------------------------------------------CREATE A BUTTON------G3----
local note2 = display.newImage( “note2.png” )
    note2:setReferencePoint(display.BottomLeftReferencePoint)
    note2.x = 110
    note2.y = 701
-----------------------------------------------CREATE A FUNCTION TO MAKE THE BUTTON WORK–
function note2:tap( event )
    
    local sound = GGSound:new {1, 2, 3}
    sound:add (“note2.wav”, “note2”)
    sound:setVolume (0.8)
    sound:play (“note2”)    
end
---------------------------------------------------------------CALL THE FUNCTION----------
note2:addEventListener( “tap”, note2 )

--------------------------------------------------------------CREATE A BUTTON--------A3—
local note3 = display.newImage( “note3.png” )
    note3:setReferencePoint(display.BottomLeftReferencePoint)
    note3.x = 161
    note3.y = 701
-----------------------------------------------CREATE A FUNCTION TO MAKE THE BUTTON WORK–
function note3:tap( event )
    
    local sound = GGSound:new {1, 2, 3}
    sound:add (“note3.wav”, “note3”)
    sound:setVolume (0.8)
    sound:play (“note3”)    
end
---------------------------------------------------------------CALL THE FUNCTION----------
note3:addEventListener( “tap”, note3 )

– AL TOCAR LAS NOTAS, SE TARDA UN POQUITO DE MILESIMAS DE SEGUNDO, no toca al instante, no se como hacer eso.

A la mejor lo tengo que hacer con una tabla o un array, pero no se como. Lo unico que quiero es un piano de 18 teclas blancas y 13 notas negras que al tocar las teclas se oiga el sonido.

Gracias por todo y espero tu respuesta.

Victor

Hola Victor: 

GRACIAS POR TODA LA AYUDA Y TODO TU TIEMPO. manana te mando mas informacion y preguntas, por lo pronto

De nada, siempre es un placer ayudar a los demás :slight_smile:

DONDE PUEDO COPIAR el file de [ preference = require “preference”]

Te he subido la versión que utilizo en http://www.paytopwn.com/coronasdk/ 

Una preguntita, como le hago para que mi APP se vea solamente en “Landscape”?

Dentro de build.settings deberías incluir el código de “orientation”

...  settings = {     MinimumOSVersion="4.3",     orientation =     {          default = "portrait",          supported = {"portrait","landscapeLeft", "landscapeRight", "portraitUpsideDown"},     },     iphone =     { ...  

Cambiando la configuración que hay (portrait) por “LandscapeLeft” :) y quitar los formatos que no quieras que soporte tu aplicación (portraitUpsideDown + portrait)

local background = display.newImage (“background.png”)

 

pero la imagen sale cortada, no se ve bien, y siempre sale en “Portrait” mode, le tengo que hacer

– Hardware

–Rotate Left

 

Pero de todos modos sale cortada.

Para hacer que una imágen se adapte, deberías coger los valores del dispositivo para tal de reescalar la imágen , como comentaba aqui : http://forums.coronalabs.com/topic/34083-adaptar-imagenes-a-pantalla-y-duda-de-licencias/ 

        bg = display.newImage("images/background/vertical/background\_v.png", 0,0, true)         bg:scale(display.contentWidth/bg.contentWidth, display.contentHeight/bg.contentHeight)         bg.x = display.contentWidth/2         bg.y = display.contentHeight/2         exerciseGroup:insert( bg )

De esta manera se obtiene el tamaño del display y lo escala n_n.

Hay manera de mandarte jpeg, o fotos, para que veas como voy?

Si quieres puedes mandarme correos a paytopwn@gmail.com 

Esta tarde miraré el código a ver qué puede ser. Todavía no he utlizado nunca el GGSound (aunque me decía Brent que debería usarlo - will do in my next app Brent! :slight_smile: )

¡ Un saludo !  

Hi Brent, Dr. Burton, Saer, And all my friends at Corona Forum

I am working now on my book finally!!!

See, I told you, I did not needed a lot of things to start working, it’s a simple book for children.

I have the storyboard working, I have so far 4 pages, the home and the main.

I can add pages, make simple animation, and I can add sound to the buttons.

So I’m really happy because now I can keep learning more, but start making my app now

Thank you for all your help, thanks Dr. Burton for your book.


One question, I think it’s very important…

Once I finish my book which it’s for the iPad ONLY, and I can see the final book in the Corona Simulator in my Mac…

what I see in my computer will be the same, and it will look and behave exactly the same as in a REAL iPAD?


And one more…

About money – I have to pay $99.00 per year to Apple for the developer program to upload my app to the app store

to see if they accept it, right?

And how much money do I have to pay to Corona for using the program?

Is there any more fees or money involved?


Thank you for everything.

Let’s see how long it takes me to write my book

Victor

Hey Victor, 

Pretty much you get the same output in the simulator and in the real device - I’ve had little trouble with that.

About the Apple developer program, that’s needed even to compile for the device with Corona SDK, if I am right, and to publish on the app store. 

I am looking at the pricing of Corona SDK and I’m confused right now : http://coronalabs.com/products/corona-sdk/faqs/#subscriptions . We paid like 349$ for the license to be able to publish on android and iOS. It seems that they have changed that now :S.

Cheers! 

Let’s see…

$349.00 ONE TIME ONLY FOR LIFE?

$349.00 per year? per month?

If you want iOS and Android, but if you want only iPad?

I hope someone knows…

Victor

349$ per year, but it seems that it has changed now… 

They used to have a 179$ license to build for either iOS or android - if you want to build for iPad you’re gonna need to build for iOS :slight_smile: (and your app will probably be compatible with iphones too!) 

I hope someone else knows how it works now! 

Cheers! 

Hi Victor, @paytopwn,

The pricing change was announced about a month ago (April 4). Here’s the full link:

http://www.coronalabs.com/blog/2013/04/04/state-of-corona-new-public-release-free-re-imagining-pro/

To summarize, “Corona Starter” is now free. This applies to you, Victor… basically, you can develop and publish your book app(s) using Corona for free, for as long as you want. Before, it was free to “develop” but $199 or $349 per year to publish to the marketplaces (iOS or Android: $199 for one or $349 for both). Now with Corona Starter, that is free. You can also include your own custom launch/splash screen for your company/studio, which is a restriction on most other “free” platforms.

On the other side is “Corona Pro”. This applies to you, @paytopwn. Since you are already a Pro subscriber, and were before this past Wednesday (May 1), your price does *not* increase beyond $349 annually for up to 2 full years. New users who subscribe now, or in the future, will pay $599 annually. What Pro offers over Starter is, most notably: Plugins (to expand the core Corona functionality and features), In-App Purchases, Analytics, access to Daily Builds and prereleases, and full access to the upcoming Open GL 2.0 ES graphics features.

The blog post I linked describes this all in greater detail, but I hope this summarizes it.

Best regards,

Brent Sorrentino

Hi Brent

Let me see if I understand VERY CLEAR!

– --------------------------They said this --------------

Now, of course, not everything is free — we’ve got a business to run after all!

If you want to access certain specific features like in-app purchase
and analytics, you’ll need to subscribe to a paid plan. You can still
build with those features on your own device, but you can’t publish apps
to the store if they use those premium features. Daily builds are also
only available to paying subscribers.


– features like in-app purchase  – So I can, or I can NOT put my book (App) in the Apple Store? yes or no?

– and analytics, – This is just to see who gets your app or from where same as google analytics right?

---------------------HERE IT SAID THAT I CAN USE THOSE FUTURES (in-app and analytics)----------------

You can still build with those features on your own device – I REALLY DID NOT GET THIS PART

---------------------BUT HERE IT SAID THAT IF I USED THOSE FEATURES, I CAN NOT PUBLISH TO THE APP STORE ------

but you can’t publish apps to the store if they use those premium features – See it sais that I can’t publish apps

------------What are daily builds?----------------------

Daily builds are also only available to paying subscribers.

Please can you explain this a little bit better, my English may not be that great.

Thank you

Brent

P.S.

I’m on page 9 of the book

Hi Victor,

With the Corona Starter plan (free):

  1. Yes, you can publish your books in the Apple App Store (and Google Play, Amazon, or Nook markets). Again, this is free.

  2. You still  must pay for an Apple developer account. This is a requirement of Apple, not Corona. The price is $99 per year.

And with Corona Pro, you get:

  1. Analytics. These are basically as you say: information about your app users (location, which devices used, etc.)

  2. In-App Purchases: this allows users to purchase items from within your app (additions, extra features, etc.)

  3. Daily Builds: this allows you to use the most current (daily/weekly) additions and improvements to Corona.

  4. Plugins and the upcoming graphics improvements… you probably don’t need these at this time.

To summarize, you are fine with Corona Starter at this time. Learn Corona, develop some of your books, put them into the App Store, and then later you can decide if you want the additional features of Corona Pro.

Does that help?

Brent