Mar 252011

This tutorial explains how to add a score to your app that goes up based on a timer.

I got a request today for a tutorial explaining how to have a score that goes up by X points every second that passes; this is the result of that request.

You will notice how incredibly simple it is once you know how – main.lua requires all needed code, while the project folder also contains score.lua and PNGs for numbers 0 to 9, a score background and a space.

Under no circumstances may you reuse the images in this project. (They’re mine, so please respect that – simply replace them with your own.)

Enjoy! I hope this helps you.

Peach Pellen :)

PS – If you would like to expand your understanding of the score method that I am using, this score tutorial should help.


Like this post? Subscribe to the monthly newsletter!


  12 Responses to “Adding A Score To Your App That Goes Up Based On A Timer”

  1. Hey Jameel, Peach is my first name and I’m female, just to clear that up, haha.

    The forum you should be able to post in once you are logged into your account. If you are not allowed to post there may be an activation link in your email you have missed so you should double check that :)

  2. Hello Mr. Peach

    You are a good teacher, you explain things very well, and you are good in explaning. Thanks again from the bottom of my heart.
    The Ansca Mobile froum is locked. How can i get in. Plz help me.

    Warm Regds

  3. Jameel, please post that in the Ansca Mobile forum, it is much easier to go back and forth and view your code properly that way. Someone (me or others) will be able to help you there. :)

  4. I need some help—
    I need to create score for game, then i need the application to tell add
    scores, i have tried everything and cannt find a way to do this, plz provide
    me some sample if you can so that it can make me undetstand better.
    pls help me.

    The below is the code …
    display.setStatusBar (display.HiddenStatusBar)
    require (“physics”)

    local score = 0
    local scoreText
    local levelText
    local levelNum

    function main()
    createScore ()
    createLevel ()


    function setUpPhysics()

    function createPaddle()
    local paddleWidth = 200
    local paddleHeight = 30

    local paddle = display.newRect( display.contentWidth /1 -
    paddleWidth /1, display.contentHeight -30, paddleWidth, paddleHeight )
    physics.addBody(paddle, “static”, {friction=0, bounce=1})
    local movePaddle = function(event)
    paddle.x = event.x

    Runtime:addEventListener(“touch”, movePaddle)

    function createBall()
    local ballRadius = 20
    ball = display.newCircle( display.contentWidth / 2,
    display.contentHeight / 2, ballRadius )
    physics.addBody(ball, “dynamic”, {friction=0, bounce = 1,
    ball.collision = function(self, event)
    if(event.phase == “ended”) then
    if(event.other.type == “destructible”) then
    if(event.other.type == “bottomWall”) then
    local onTimerComplete = function(event)
    timer.performWithDelay(500, onTimerComplete , 1)
    ball:addEventListener(“collision”, ball)

    function startGame()
    ball:setLinearVelocity(200, 600)


    function createBricks()
    local brickWidth = 60
    local brickHeight = 30
    local numOfRows = 6
    local numOfCols = 7
    local topLeft = {x= display.contentWidth / 2 – (brickWidth *
    numOfCols ) / 2, y= 50}
    local row
    local col
    for row = 0, numOfRows – 1 do
    for col = 0, numOfCols – 1 do

    function createScore ()
    levelScore = display.newText(‘Score:’, 50, 10, ‘akashi’, 30)
    levelScore:setTextColor(254, 203, 50)
    levelNum = display.newText(’1′, 540, 10, ‘akashi’, 30)
    function createLevel ()
    levelText = display.newText(‘Level:’, 460, 10, ‘akashi’, 30)
    levelText:setTextColor(254, 203, 50)
    levelNum = display.newText(’1′, 540, 10, ‘akashi’, 30)


    – Create a brick
    local brick = display.newRect( topLeft.x + (col * brickWidth),
    topLeft.y + (row * brickHeight), brickWidth, brickHeight )
    brick:setFillColor(math.random(50, 255), math.random(50, 255),
    math.random(50, 255), 255)
    brick.type = “destructible”
    physics.addBody(brick, “static”, {friction=0, bounce = 1})

    function createWalls()
    local wallThickness = 10
    – Left wall
    local wall = display.newRect( 0, 0, wallThickness,
    display.contentHeight )
    physics.addBody(wall, “static”, {friction=0, bounce = 1})
    – Top wall
    wall = display.newRect(0,0, display.contentWidth, wallThickness)
    physics.addBody(wall, “static”, {friction=0, bounce = 1})
    – Right wall
    wall = display.newRect(display.contentWidth – wallThickness, 0,
    wallThickness, display.contentHeight)
    physics.addBody(wall, “static”, {friction=0, bounce = 1})
    – Bottom wall
    wall = display.newRect(0, display.contentHeight – wallThickness,
    display.contentWidth, wallThickness)
    physics.addBody(wall, “static”, {friction=0, bounce = 1})
    wall.type = “bottomWall”


  5. Thanks, I will try this.

  6. Rather than displaying the score on a separate screen try bumping it off the side of the screen so it is hidden. It’s not a great score system, it may be better to use a custom font and do the score in a normal way without images, even?

    Peach :)

  7. Hi Peach,

    I get this error

    score.lua:72: attempt to perform arithmetic on field ‘x’ (a nil value)

    I have score.setScore(0) in my scene.

    I am using the Director Class. When I leave the scene I cancel the timer and display the score on a separate scene. When I come back, I would think the scene would just load the same as before. However…

    I think I might try the Storyboard. Do you think it would make a difference?



  8. Hi Peach,

    I came across your tutorials. Thanks for all the useful info.

    I was wondering how do you reset the score? Basically, I am passing to the score to another display (results.lua) after viewing the results I want to go back to the main screen and start over. However, I am getting an error for x having a nil value.

    Seems like this should be simple, but I am missing something.


    • Hey there,

      You can reset it by doing score.setScore(0) if I recall correctly.

      I’m not sure about your error for x being nil, does the error give you a line?

      Peach :)

  9. And to you ^-^;

  10. bamf.

 Leave a Reply



You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Notify me of followup comments via e-mail. You can also subscribe without commenting.