I am new to corona sdk and trying to build sample in it. i want to get back to main screen automatically after some time by destroying my scene(i mean that scene destroys itself after some particular time and user get back to main screen).I know that for some this may sound silly but i beginner to Corona
Here is my code of main.lua :-
local storyboard = require "storyboard"
local widget = require( "widget" )
--/**/ widget.setTheme( "widget_theme_android" )
local json = require "json"
local particleDesigner = require( "particleDesigner" )
local physics = require( "physics" )
physics.start()
-------------------------------------------------------------------------------
local sky = display.newImage( "sky.jpg",contentCenterX,display.contentCenterY)
local emitter
emitter = particleDesigner.newEmitter("air_stars.json")
emitter.x = (contentCenterX)
emitter.y = (contentCenterY)
local button = {}
y= -50
for count = 1,3 do
y = y + 110
x = 20
for insideCount = 1,3 do
x = x + 110
button[count] = display.newImage("1.png")
button[count].x = x
button[count].y = y
local container = display.newContainer( 0, 0 )
container:translate(button[count].x-40, button[count].y-40)
local bkgd = display.newImage( container, "2.png" )
function buttonTap(self)
button[count].touch = transition.to(container,{time=3000, height = button[count].height+x, width = button[count].width+y, onComplete = StartGame})
function StartGame()
storyboard.purgeScene("main")
if count == 1 and insideCount == 1 then
storyboard:gotoScene("bridge")
elseif count == 1 and insideCount == 2 then
storyboard:gotoScene("Heli")
end
end
end
button[count]:addEventListener( "touch", buttonTap)
end
end
return storyboard
And Here is my bridge.lua file :- (http://piratepad.net/ep/pad/view/ro.JR1Bpt1qkA$/latest)
Any help will be appreciated
Thanks
Hi sid here you go:
_W = display.contentWidth;
_H = display.contentHeight;
local button = {}
x = -20
for count = 1,3 do
x = x + 90
y = 20
for insideCount = 1,3 do
y = y + 90
button[count] = display.newImage("imgs/one.png");
button[count].x = x;
button[count].y = y;
local container = display.newContainer( 0, 0 )
container:translate(button[count].x, button[count].y)
local bkgd = display.newImage( container, "imgs/two.png" )
function buttonTap(self)
button[count].touch = transition.to(container,{time=3000, height = button[count].height+x, width = button[count].width+y})
end
button[count]:addEventListener( "touch", buttonTap )
end
end
just add this to the bridge.lua
local function goBack()
storyboard:gotoScene("buttons")
end
timer.performWithDelay( 3000, goBack, 1 )
and this to main.lua
storyboard.purgeOnSceneChange = true
Related
i'm new here, i'm trying to do a videogame for android with corona sdk, but i'm stuck with the creation of random particle on the background,
here is the code:
local menu = composer.newScene()
function menu:create( event )
local bg = self.view
local particlesGroup = self.view
local sceneGroup = self.view
blackLayer = display.newImageRect( "black_layer.png", 1280, 300 )
blackLayer.y = display.contentCenterY + 150
blackLayer.x = display.contentCenterX
blackLayer.alpha = 0.6
background = display.newImageRect( "background.png", 1280 , 720 )
background.x = display.contentCenterX
background.y = display.contentCenterY
playBtn = widget.newButton( {
id="playBtn",
x=display.contentCenterX+350,
y=blackLayer.y,
labelColor = { default={0.922, 0.938, 0.941}, over={0.9, 0.3, 0.234, 0.6}},
label = "Play Now",
defaultFile = "redBtn.png",
overFile = "whiteBtn.png",
width = 200,
height = 200,
fontSize = 30,
font = "Fonts/Raleway-Bold.ttf",
--onRelease = composer.gotoScene( "game")
} )
settingsBtn = widget.newButton( {
id="playBtn",
x=display.contentCenterX,
y=blackLayer.y-50,
font = "Fonts/Raleway-Bold.ttf",
label = "Settings",
defaultFile = "rectWhiteBtn.png",
overFile = "rectRedBtn.png",
width =250,
height = 100,
fontSize = 30,
labelColor = { default={0.9, 0.3, 0.234} , over={0.922, 0.938, 0.941, 0.6} },
onRelease = gotoSettings
} )
highScoresBtn = widget.newButton( {
id="highScoresBtn",
x=display.contentCenterX,
y=settingsBtn.y + 100,
font = "Fonts/Raleway-Bold.ttf",
label = "High Scores",
defaultFile = "rectWhiteBtn.png",
overFile = "rectRedBtn.png",
width =250,
height = 100,
fontSize = 30,
labelColor = { default={0.9, 0.3, 0.234} , over={0.922, 0.938, 0.941, 0.6} },
--onRelease = composer.gotoScene("highScores")
} )
bg:insert(background)
sceneGroup:insert(blackLayer)
sceneGroup:insert(playBtn)
sceneGroup:insert(settingsBtn)
sceneGroup:insert(highScoresBtn)
function generateParticles()
local xy=math.random(30,70)
local newParticle = display.newImageRect( particlesGroup, objectSheet , math.random(13), xy, xy )
newParticle.x = (math.random(1280)*math.random(88932))%1280
newParticle.y = (math.random(720)*math.random(13546))%720
newParticle.alpha = 0
transition.to( newParticle, {alpha=1, time=150, onComplete=dimParticle, onCompleteParams=newParticle})
end
function generateParticlesSmall()
local xy=math.random(5,15)
local newParticle = display.newImageRect( particlesGroup, objectSheet , 1, xy, xy )
newParticle.x = (math.random(1280)*math.random(88932))%1280
newParticle.y = (math.random(720)*math.random(13546))%720
newParticle.alpha = 0
transition.to( newParticle, {alpha=1, time=150, onComplete=dimParticle, onCompleteParams=newParticle})
end
end
function menu:show( event )
local bg = self.view
local particlesGroup = self.view
local sceneGroup = self.view
local phase = event.phase
if ( phase == "will" ) then
bigPTimer1=timer.performWithDelay( 1, generateParticles, 0 )
-- Start the timer wich call 'generateParticles' for each ms
smallPTimer=timer.performWithDelay( 1, generateParticlesSmall, 0 )
-- Start the timer wich call 'generateParticlesSmall' for each ms
particlesGroup:toBack()
elseif ( phase == "did" ) then
if event.phase=="began"then
end
if event.phase=="ended"then
end
end
end
function menu:hide( event )
local bg = self.view
local particlesGroup = self.view
local sceneGroup = self.view
local phase = event.phase
if ( phase == "will" ) then
-- Code here runs when the scene is still off screen (but is about to come on screen)
elseif ( phase == "did" ) then
-- Code here runs when the scene is entirely on screen
end
end
function menu:destroy( event )
local bg = self.view
local particlesGroup = self.view
local sceneGroup = self.view
end
--Funzioni
local function gotoGame()
composer.gotoScene( "game" )
end
local function gotoHighScores()
composer.gotoScene( "highscores" )
end
function gotoSettings()
reproduceEffet1()
timer.cancel(bigPTimer1)
timer.cancel(smallPTimer)
composer.gotoScene( "settings", options)
end
--funzioni
local function removetotally( particle )
display.remove( particle )
end
function dimParticle( particle )
transition.to( particle, {alpha=0, time=500, onComplete = removetotally, onCompleteParams = particle})
end
--
menu:addEventListener( "create", menu )
menu:addEventListener( "show", menu )
menu:addEventListener( "hide", menu )
menu:addEventListener( "destroy", menu )
--
return menu
All functions are working perfectly, but the problem is that I can't move back the group of particles, between bg and sceneGroup.
Thank for listening me.
In your code you have only 1 display group.
local bg = self.view
local particlesGroup = self.view
local sceneGroup = self.view
You need to create particlesGroup as child in order to move it back:
Declare local variables on the top of the file:
local menu = composer.newScene()
local bg, particlesGroup
Create groups in menu:create
bg = display.newGroup()
particlesGroup = display.newGroup()
local sceneGroup = self.view
sceneGroup:insert(bg)
sceneGroup:insert(particlesGroup) -- here particlesGroup will be on the top
particlesGroup:toBack() --now particlesGroup is under bg
mate, i need help for using scrollview in corona sdk, fyi im new in corona sdk..
im trying to make some simple puzzle game here
so here we go pieces code:
local widget = require("widget")
_W = display.contentWidth -- Get device screen width
_H = display.contentHeight -- Get device screen height
imgPiece = 3
imgPieces = {}
imgPieceStartingY = { 80,230,380 }
imgPieceWidth, imgPieceHeight = 120, 120
-- Get some background image here
bg = display.newImageRect("bg.png", _W, _H)
bg.x = _W/2
bg.y = _H/2
-- Create some scrollview
scrollView = widget.newScrollView{
top=100,
left = _W/2,
height=_H/2,
width = 160,
hideBackground = true,
scrollWidth = 50 ,
scrollHeight = 1000 }
-- Set image inside the scrollview
for i = 1, imgPiece do
imgPieces[i] = display.newImageRect("s"..i..".jpg", imgPieceWidth, imgPieceHeight)
imgPieces[i].x = 85 -- Set Starting X position for img piece
imgPieces[i].y = imgPieceStartingY[i] -- Set Starting Y position for img piece
imgPieces[i].id = i
imgPieces[i].place = "start"
scrollView:insert(imgPieces[i])
end
the problem is, when i try to drag the image out from the scrollview the image will dissapear.
how can i make the image still visible when object is leaving the scrollview boundary box(which i set in 160 width) while user still dragging and hold the image on?
thx
I had the same problem and I solved with the image inserted in the main group in "began" phase.
local function dragElements(event)
local phase = event.phase
local obj = event.target
if phase == "began" then
display.getCurrentStage():setFocus(obj)
grp:insert(obj)
obj.StartMoveX = event.x
obj.StartMoveY = event.y
elseif phase == "moved" then
obj.x = (event.x - event.xStart) + obj.StartMoveX
obj.y = (event.y - event.yStart) + obj.StartMoveY
elseif phase == "ended" or phase == "canceled" then
display.getCurrentStage():setFocus(nil)
end
return true
end
i want my bird to have a up and down movement when it plays here is my code
function updateMons2()
for a = 1, mons2.numChildren, 1 do
physics.addBody(mons2[a],"kinematic")
if(mons2[a].isAlive == true) then
(mons2[a]):translate(speed * -1, 0)
if(mons2[a].x < -80) then
mons2[a].x = 1000
mons2[a].y = 500
mons2[a].isAlive = false
end
end
end
end
this code only does is from right to left i want my bird to move up and down while it is going left can someone help me?
Here is a sample. try this:
local mons2 = {}
local yPos = {}
for i=1,2 do
mons2[i] = display.newImageRect("1.png",50,50)
mons2[i].x = 100
mons2[i].y = 100+(100*(i-1))
mons2[i].isAlive = true
yPos[i] = mons2[i].y
end
speed = 10
count_ = 0
function updateMons2()
count_ = count_ + 1
for a = 1, 2, 1 do
physics.addBody(mons2[a],"kinematic")
if(mons2[a].isAlive == true) then
mons2[a]:translate(speed * -1, 0)
transition.to(mons2[a],{time=50,y=yPos[a]+(20*(count_%2)*-1)})
if(mons2[a].x < -80) then
mons2[a].x = 350
end
end
end
end
timer.performWithDelay(100,updateMons2,-1)
Keep Coding........... :)
hi i need help with this code. i am trying to make three ball bounce around by animating it. i i found some code that code be some help in the Corona sdk sample code. i try to change the image from a circle to a image i have in my folder but now luck it wont work. also i am using story board API i really need this thanks i am new to corona sdk.
this is the sample code
this code works for me but i want to add multiple balloons the would bounce around in their own direction and bounce in to each other and change direction. I am kinda stuck on this can someone help thanks :)....................
here the code you ask for sorry for taking so long
local function newBall( params )
local xpos = display.contentWidth*0.5
local ypos = display.contentHeight*0.5
local circle = display.newCircle( xpos, ypos, params.radius );
circle:setFillColor( params.r, params.g, params.b, 255 );
circle.xdir = params.xdir
circle.ydir = params.ydir
circle.xspeed = params.xspeed
circle.yspeed = params.yspeed
circle.radius = params.radius
return circle
end
local params = {
{ radius=20, xdir=1, ydir=1, xspeed=2.8, yspeed=6.1, r=255, g=0, b=0 },
{ radius=12, xdir=1, ydir=1, xspeed=3.8, yspeed=4.2, r=255, g=255, b=0 },
{ radius=15, xdir=1, ydir=-1, xspeed=5.8, yspeed=5.5, r=255, g=0, b=255 },
-- newBall{ radius=10, xdir=-1, ydir=1, xspeed=3.8, yspeed=1.2 }
}
local collection = {}
-- Iterate through params array and add new balls into an array
for _,item in ipairs( params ) do
local ball = newBall( item )
collection[ #collection + 1 ] = ball
end
-- Get current edges of visible screen (accounting for the areas cropped by "zoomEven" scaling mode in config.lua)
local screenTop = display.screenOriginY
local screenBottom = display.viewableContentHeight + display.screenOriginY
local screenLeft = display.screenOriginX
local screenRight = display.viewableContentWidth + display.screenOriginX
function collection:enterFrame( event )
for _,ball in ipairs( collection ) do
local dx = ( ball.xspeed * ball.xdir );
local dy = ( ball.yspeed * ball.ydir );
local xNew, yNew = ball.x + dx, ball.y + dy
local radius = ball.radius
if ( xNew > screenRight - radius or xNew < screenLeft + radius ) then
ball.xdir = -ball.xdir
end
if ( yNew > screenBottom - radius or yNew < screenTop + radius ) then
ball.ydir = -ball.ydir
end
ball:translate( dx, dy )
end
end
Runtime:addEventListener( "enterFrame", collection );
can someone help me to change the images from circle to my balloon01.png ,balloon02.png and balloon03.png images in my folder. also this is the error i get when i add it to my game that include the story board API
level1.lua 157:attempt to call global "newBall" (a nil value)
i was trying to post an image but because i am new i can't. I have the code that crate the ball in the create scene that's apart of the Corona SDK story board API thanks ...:0 for your help
I've updated the code. Just try replacing all your code with the following code:
local xpos,ypos = {},{}
local xdirection,ydirection = {},{}
local xMultiplier = {2.8,3.0,4.0} -- these arrays should contain the values for each objects
local yMultiplier = {1.0,2.2,5.5} -- these arrays should contain the values for each objects
local totalImages = 3 -- no. of images/object that you need in the scene
local circle = {}
local diameter = {50,30,20} -- these arrays should contain the values for each objects
for i=1,totalImages do
xpos[i] = display.contentWidth*0.5
ypos[i] = display.contentHeight*0.5
xdirection[i] = 1
ydirection[i] = 1
circle[i] = display.newImageRect("balloon0"..i..".png",diameter[i],diameter[i])
circle[i]:setFillColor(255,0,0,255)
end
local function animate(event)
for i=1,totalImages do
xpos[i] = xpos[i] + ( xMultiplier[i] * xdirection[i] )
ypos[i] = ypos[i] + ( yMultiplier[i] * ydirection[i] )
if (xpos[i] > display.contentWidth - 20 or xpos[i] < 20) then
xdirection[i] = xdirection[i] * -1;
end
if (ypos[i] > display.contentHeight - 20 or ypos[i] < 20) then
ydirection[i] = ydirection[i] * -1;
end
circle[i]:translate( xpos[i] - circle[i].x, ypos[i] - circle[i].y)
end
end
Runtime:addEventListener( "enterFrame", animate )
Note: Make sure to place the following image files in the same folder where your main.lua resides:
balloon01.png
balloon02.png
balloon03.png
Keep Coding............ :)
I'm having some troubles when I try to reload a scene.
In my program, users are able to draw a line with their finger (it's an iOS/Android app), and it works pretty good, but, when I try to reload the scene, the console returns
"Attempt to index field 'parent' (a nil value)"
at line 78
The code I've used to perform the "drawline" and the reload (replay in this case) features is
local lines = {}
local lineGroup = display.newGroup()
local prevX,prevY
local isDrawing = true
local i = 1
local function distanceBetween(x1, y1, x2, y2)
local dist_x = x2 - x1
local dist_y = y2 - y1
local distanceBetween = math.sqrt((dist_x*dist_x) + (dist_y*dist_y))
return distanceBetween
end
local function drawLine(e)
if(e.phase == "began") then
for i = #lines, 1, -1 do
if (lines[i]) then
if (lines[i].parent) then
lines[i].parent:remove(lines[i])
end
lines[i] = nil
end
end
lines = {}
line_number = 100
prevX = e.x
prevY = e.y
isDrawing = true
elseif(e.phase == "moved") then
local distance = distanceBetween(prevX, prevY, e.x, e.y)
if(isDrawing and distance < 100) then
if(lines[i]) then lineGroup:remove(i) end
lines[i] = display.newLine(prevX, prevY, e.x, e.y)
lines[i]:setColor(255, 255, 0)
lines[i].width = 3
lines[i].myName = "lines"
if(lines[i].y < 400) then
for i = #lines, 1, -1 do
if (lines[i]) then
if (lines[i].parent) then
lines[i].parent:remove(lines[i])
end
lines[i] = nil
end
end
end
local dist_x = e.x - prevX
local dist_y = e.y - prevY
physics.addBody(lines[i], "static",
{ density = 1, friction = 0.5, bounce =
-0.8, shape = {0, 0, dist_x, dist_y, 0, 0} } )
lineGroup:insert(lines[i])
end
elseif(e.phase == "ended") then
isDrawing = true
end
return lineGroup
end
Runtime:addEventListener("touch",drawLine)
where line 78 is:
lineGroup:insert(lines[i])
I restart my game using
local replayBTN = display.newImageRect("images/replay.png", 25, 25)
replayBTN.alpha = 1
replayBTN.x = _W/2
replayBTN.y = _H/2
localGroup:insert( replayBTN)
function replay(event)
director:changeScene("game")
return true
end
replayBTN:addEventListener("touch", replay)
How can I fix my problem? THANKS ;)
the moment you try to go to another scene don't reset all the values because you set it to nil so when you go back to your scene again you get an error and i see your using director class to change scene and go to the same scene have you try using storyboard i don't know if it will be much convenient to you because i'm thinking that your just trying to reset the value of the line storyboard can recreate and reset all the value as you remove the scene and go to another scene. you can visit this link to compare director class and storyboard.
http://www.coronalabs.com/blog/2012/04/17/director-to-storyboard-transition-guide/