Hi all,
I’m new to Corona, and am working on a game with a ship in the center of the screen. Around that ship are 3 concentric 12-sided polygons that will be the shields. They rotate around the center ship. I figured out a way to make them display properly and even rotate, but I’m having a hard time figuring out 2 things:
1 - Is there a better way to do this?
and
2 - How can I detect where any single segment (of the 12 in any of the shields) is located at any instant? When a shield is hit, I want to make that segment go away. I tried to look at the x and y properties of a segment, but it always returns the same value, no matter where the shield is in its rotation.
Here’s the code I use to set up the shields:
local nYCenter = display.viewableContentHeight / 2local nXCenter = display.viewableContentWidth / 2local physics = require ("physics")physics.start( true )physics.setDrawMode( "normal" ) --use normal for builds, hybrid or debug for testingphysics.setGravity( 0, 0 )-- Show the fortress shiplocal fortressShip = display.newImage( "FortressShip.png" , nXCenter - 15, nYCenter - 15)physics.addBody( fortressShip, "static", { density = 1.0, friction = 0.0, bounce = 0.2, radius=70, } )--fortressShip.isVisible = false-- Hide statusbar using setStatusBar()display.setStatusBar( display.HiddenStatusBar )-- Build inner shield-- Declare the Arraylocal innerShield = {}innerShield[1] = display.newLine( nXCenter , nYCenter - 30, nXCenter - 15 , nYCenter - 26 )innerShield[2] = display.newLine( nXCenter - 15 , nYCenter - 26 , nXCenter - 26 , nYCenter - 15 )innerShield[3] = display.newLine( nXCenter - 26 , nYCenter - 15 , nXCenter - 30 , nYCenter )innerShield[4] = display.newLine( nXCenter - 30 , nYCenter , nXCenter - 26 , nYCenter + 15 )innerShield[5] = display.newLine( nXCenter - 26 , nYCenter + 15 , nXCenter - 15 , nYCenter + 26 )innerShield[6] = display.newLine( nXCenter - 15 , nYCenter + 26 , nXCenter , nYCenter + 30 )innerShield[7] = display.newLine( nXCenter , nYCenter + 30 , nXCenter + 15 , nYCenter + 26 )innerShield[8] = display.newLine( nXCenter + 15 , nYCenter + 26 , nXCenter + 26 , nYCenter + 15 )innerShield[9] = display.newLine( nXCenter + 26 , nYCenter + 15 , nXCenter + 30 , nYCenter )innerShield[10] = display.newLine( nXCenter + 30 , nYCenter , nXCenter + 26 , nYCenter - 15 )innerShield[11] = display.newLine( nXCenter + 26 , nYCenter - 15 , nXCenter + 15 , nYCenter - 26 )innerShield[12] = display.newLine( nXCenter + 15 , nYCenter - 26 , nXCenter , nYCenter - 30 )local gInnerShield = display.newGroup()gInnerShield.xReference = nXCentergInnerShield.yReference = nYCenterfor i=1,12 do innerShield[i]:setColor( 25, 25, 255, 255 ) innerShield[i].width = 2 gInnerShield:insert (innerShield[i]) end -- Build middle shield-- Declare the Arraylocal middleShield = {}middleShield[1] = display.newLine( nXCenter - 50 , nYCenter , nXCenter - 43 , nYCenter - 25 )middleShield[2] = display.newLine( nXCenter - 43 , nYCenter - 25 , nXCenter - 25 , nYCenter - 43 )middleShield[3] = display.newLine( nXCenter - 25 , nYCenter - 43 , nXCenter , nYCenter - 50 )middleShield[4] = display.newLine( nXCenter , nYCenter - 50 , nXCenter + 25 , nYCenter - 43 )middleShield[5] = display.newLine( nXCenter + 25 , nYCenter - 43 , nXCenter + 43 , nYCenter - 25 )middleShield[6] = display.newLine( nXCenter + 43 , nYCenter - 25 , nXCenter + 50 , nYCenter )middleShield[7] = display.newLine( nXCenter + 50 , nYCenter , nXCenter + 43 , nYCenter + 25 )middleShield[8] = display.newLine( nXCenter + 43 , nYCenter + 25 , nXCenter + 25 , nYCenter + 43 )middleShield[9] = display.newLine( nXCenter + 25 , nYCenter + 43 , nXCenter , nYCenter + 50 )middleShield[10] = display.newLine( nXCenter , nYCenter + 50 , nXCenter - 25, nYCenter + 43 )middleShield[11] = display.newLine( nXCenter - 25 , nYCenter + 43 , nXCenter - 43 , nYCenter + 25 )middleShield[12] = display.newLine( nXCenter - 43 , nYCenter + 25 , nXCenter - 50 , nYCenter )local gMiddleShield = display.newGroup()gMiddleShield.xReference = nXCentergMiddleShield.yReference = nYCenterfor i=1,12 do middleShield[i]:setColor( 255, 25, 25, 255 ) middleShield[i].width = 2 gMiddleShield:insert (middleShield[i]) end -- Build outer shield-- Declare the Arraylocal outerShield = {}outerShield[1] = display.newLine( nXCenter - 70 , nYCenter , nXCenter - 61 , nYCenter - 35 )outerShield[2] = display.newLine( nXCenter - 61 , nYCenter - 35 , nXCenter - 35 , nYCenter - 60 )outerShield[3] = display.newLine( nXCenter - 35 , nYCenter - 60 , nXCenter , nYCenter - 70 )outerShield[4] = display.newLine( nXCenter , nYCenter - 70 , nXCenter + 35 , nYCenter - 60 )outerShield[5] = display.newLine( nXCenter + 35 , nYCenter - 60 , nXCenter + 60 , nYCenter - 35 )outerShield[6] = display.newLine( nXCenter + 60 , nYCenter - 35 , nXCenter + 70 , nYCenter )outerShield[7] = display.newLine( nXCenter + 70 , nYCenter , nXCenter + 61 , nYCenter + 35 )outerShield[8] = display.newLine( nXCenter + 61 , nYCenter + 35 , nXCenter + 35 , nYCenter + 61 )outerShield[9] = display.newLine( nXCenter + 35 , nYCenter + 61 , nXCenter , nYCenter + 70 )outerShield[10] = display.newLine( nXCenter , nYCenter + 70 , nXCenter - 35 , nYCenter + 61 )outerShield[11] = display.newLine( nXCenter - 35 , nYCenter + 61 , nXCenter - 61 , nYCenter + 35 )outerShield[12] = display.newLine( nXCenter - 61 , nYCenter + 35 , nXCenter - 70 , nYCenter )local gOuterShield = display.newGroup()gOuterShield.xReference = nXCentergOuterShield.yReference = nYCenterfor i=1,12 do outerShield[i]:setColor( 25, 255, 25, 255 ) outerShield[i].width = 2 gOuterShield:insert (outerShield[i]) end local loopInnerShieldlocal initInnerShield = function() transition.to( gInnerShield, { time= 3599, rotation=359, onComplete=loopInnerShield} )endfunction loopInnerShield() transition.to( gInnerShield, { time= 1, rotation=0, onComplete=initInnerShield } )end local loopMiddleShieldlocal initMiddleShield = function() transition.to( gMiddleShield, { time= 3599, rotation=-359, onComplete=loopMiddleShield} )endfunction loopMiddleShield() transition.to( gMiddleShield, { time= 1, rotation=0, onComplete=initMiddleShield } )end local loopOuterShieldlocal initOuterShield = function() transition.to( gOuterShield, { time= 1999, rotation=359, onComplete=loopOuterShield} )endfunction loopOuterShield() transition.to( gOuterShield, { time= 1, rotation=0, onComplete=initOuterShield } )end initInnerShield()initMiddleShield()initOuterShield()function main() end[/code]Any pointers?Thanks a ton!David [import]uid: 106175 topic_id: 20002 reply_id: 320002[/import]
[import]uid: 29181 topic_id: 20002 reply_id: 77973[/import]