Demonstrate usage of Lua closure to access 'upvalues' for scene update.

This commit is contained in:
Yao Wei Tjong 姚伟忠 2014-03-03 10:28:13 +08:00
parent 45b0db3590
commit 03b9908c1d
2 changed files with 29 additions and 23 deletions

View File

@ -3,12 +3,12 @@
-- - Creating a 2D scene with sprite
-- - Displaying the scene using the Renderer subsystem
-- - Handling keyboard to move and zoom 2D camera
-- - Using Lua Closure to update scene
require "LuaScripts/Utilities/Sample"
local scene_ = nil
local cameraNode = nil
local spriteNodes = {}
function Start()
-- Execute the common startup for samples
@ -53,6 +53,7 @@ function CreateScene()
return
end
local spriteNodes = {}
local NUM_SPRITES = 200
local halfWidth = width * 0.5
local halfHeight = height * 0.5
@ -76,6 +77,27 @@ function CreateScene()
table.insert(spriteNodes, spriteNode)
end
scene_.Update = function(self, timeStep)
for _, spriteNode in ipairs(spriteNodes) do
local position = spriteNode.position
local moveSpeed = spriteNode.moveSpeed
local newPosition = position + moveSpeed * timeStep
if newPosition.x < -halfWidth or newPosition.x > halfWidth then
newPosition.x = position.x
moveSpeed.x = -moveSpeed.x
end
if newPosition.y < -halfHeight or newPosition.y > halfHeight then
newPosition.y = position.y
moveSpeed.y = -moveSpeed.y
end
spriteNode.position = newPosition
spriteNode:Roll(spriteNode.rotateSpeed * timeStep)
end
end
local animation = cache:GetResource("Animation2D", "Urho2D/GoldIcon.anm")
if animation == nil then
return
@ -159,26 +181,6 @@ function HandleUpdate(eventType, eventData)
-- Move the camera, scale movement with time step
MoveCamera(timeStep)
local halfWidth = graphics.width * 0.5
local halfHeight = graphics.height * 0.5
for _, spriteNode in ipairs(spriteNodes) do
local position = spriteNode.position
local moveSpeed = spriteNode.moveSpeed
local newPosition = position + moveSpeed * timeStep
if newPosition.x < -halfWidth or newPosition.x > halfWidth then
newPosition.x = position.x
moveSpeed.x = -moveSpeed.x
end
if newPosition.y < -halfHeight or newPosition.y > halfHeight then
newPosition.y = position.y
moveSpeed.y = -moveSpeed.y
end
spriteNode.position = newPosition
spriteNode:Roll(spriteNode.rotateSpeed * timeStep)
end
-- Update scene
scene_:Update(timeStep)
end

View File

@ -122,6 +122,10 @@ task :travis_ci_package_upload do
# Upload the package
setup_digital_keys
system "scp #{platform_prefix}Build/Urho3D-* urho-travis-ci@frs.sourceforge.net:/home/frs/project/urho3d/Urho3D/Snapshots" or abort 'Failed to upload binary package'
# Upload readme file
if ENV['SITE_UPDATE']
system 'scp Readme.txt urho-travis-ci@frs.sourceforge.net:/home/frs/project/urho3d/Urho3D' or abort 'Failed to upload readme file'
end
end
def scaffolding(dir)