官术网_书友最值得收藏!

Optimize your workflow

So far, we have touched on the vital basics of programming in Lua and the terminology used in Corona SDK. Once you start developing interactive applications to sell in the App Store or Android market, you need to be aware of your design choices and how they affect the performance of your application. This means taking into consideration how much memory your mobile device is using to process the application. Here are some things to look for if you're just starting out with Corona SDK.

Use memory efficiently

In some of our earlier examples, we used global variables in our code. Cases like those are an exception since the examples did not contain a high volume of functions, loops to call out to, or display objects. Once you start building a game that is heavily involved with function calls and numerous display objects, the local variables will increase performance within your application and be placed on the stack so that Lua can interface them faster.

The following code will cause memory leaks:

-- myImage is a global variable
myImage = display.newImage( "image.png" )
myImage.x = 160;  myImage.y = 240

-- A touch listener to remove object
local removeBody = function( event )
  local t = event.target
  local phase = event.phase

  if "began" == phase then
    -- variable "myImage" still exists even if it's not displayed
    t:removeSelf() -- Destroy object
  end

  -- Stop further propagation of touch event
  return true
end

myImage:addEventListener( "touch", removeBody )

The preceding code removes myImage from the display hierarchy once it is touched. The only problem is that the memory used by myImage leaks because the myImage variable still refers to it. Since myImage is a global variable, the display object it references will not be freed even though myImage does not display on the screen.

Unlike global variables, localizing variables helps speed up the look-up process for your display object. It also only exists within the block or chunk of code that it's defined in. Using a local variable in the following code will remove the object completely and free memory:

-- myImage is a local variable
local myImage = display.newImage( "image.png" )
myImage.x = 160;  myImage.y = 240

-- A touch listener to remove object
local removeBody = function( event )
  local t = event.target
  local phase = event.phase

  if "began" == phase then
    t:removeSelf() -- Destroy object
    t = nil
  end

  -- Stop further propagation of touch event
  return true
end

myImage:addEventListener( "touch", removeBody )
主站蜘蛛池模板: 敖汉旗| 襄城县| 上高县| 阿克苏市| 侯马市| 日照市| 康马县| 拜城县| 台中县| 辛集市| 称多县| 册亨县| 襄城县| 香港| 襄樊市| 山东省| 盐边县| 永定县| 呼伦贝尔市| 桦南县| 乌恰县| 广丰县| 平谷区| 定西市| 信阳市| 军事| 南华县| 安仁县| 余干县| 岫岩| 石景山区| 丰都县| 通辽市| 厦门市| 车险| 定安县| 甘谷县| 怀宁县| 萨迦县| 隆化县| 桃江县|