스테이지
점수 처리
시작처리
종료처리
이미지 사용할 것:http://m484games.ucoz.com/index/shoot_39_em_up_gfx/0-38
참고 소스:http://www.tandgapps.co.uk/resources/tutorial-space-shooter-in-240-lines/
폭발 처리
폭발 장면 이미지를 구합니다. 당연히 애니메이션이 되어야 하기 때문에 이미지가 여러개 붙어있는 하나의 png파일로 만듭니다.
위와같은 이미지를 사용하겠습니다.
두개의 함수로 구성되어 있습니다. loadImgs를 미리 호출해주고 어디에서나 폭발 장면이 필요할때 쓰는 makeExp 라는 함수를 만들었습니다.
expListener은 애니메이션이 끝나면 사라질때 사용합니다.
그리고 expGroup를 미리 만들어 합니다.
local expGroup = display.newGroup()
간략하게 설명하자면 애니메이션을 위해서는 sheet를 먼저 로드하고 newSprite로 이미지 장수 delay를 결정하게 됩니다.local sheetExp local function loadImgs() local sheetOptions = { width = 20, height = 20, numFrames = 6 } sheetExp = graphics.newImageSheet( "exp_20_20_6.png", sheetOptions ) end local function makeExp(x,y) local function expListener( event ) local thisSprite = event.target -- "event.target" references the sprite if ( event.phase == "ended" ) then thisSprite:removeSelf(); thisSprite = nil end end local sequencesExp = { { name = "exp", start = 1, count = 6, time = 200, loopCount = 1, loopDirection = "forward" } } local exp = display.newSprite( sheetExp, sequencesExp ) exp.x = x; exp.y = y exp:play() exp:addEventListener( "sprite", expListener ) expGroup:insert( exp ) print(expGroup.numChildren) end
점수의 계산은 총알과 적이 충돌이 일어나면 score를 더해줍니다.
그리고 충돌날때 makeExp를 호출합니다.
local function onCollision(event) if event.phase == "began" then local obj1 = event.object1; local obj2 = event.object2; if obj1.name == "laser" and obj2.name == "enemy" or obj1.name == "enemy" and obj2.name == "laser" then if( obj2.name =="enemy") then makeExp(obj2.x,obj2.y) else makeExp(obj1.x,obj1.y) end display.remove( obj1 ); obj1 = nil display.remove( obj2 ); obj2 = nil score = score + 100 --Yay points! elseif obj1.name == "ship" and obj2.name == "enemy" or obj2.name == "ship" and obj1.name == "enemy" then makeExp(obj2.x,obj2.y) makeExp(obj1.x,obj1.y) display.remove( obj1 ); obj1 = nil display.remove( obj2 ); obj2 = nil gameOver()--Weve died so call gameover...
텍스트를 미리 만들어 두고 주기적으로 텍스트 값을 바꾸면 화면에 변경된 값이 나타나게됩니다.
local function loadTexts() scoreText = display.newText("Score: "..score, 0,0,"Helvetica",18) scoreText:setTextColor(220, 0, 0) scoreText.x = _W*0.5; scoreText.y = 10 fgGroup:insert(scoreText) levelText = display.newText("Level: "..wave, 0,0,"Helvetica",18) levelText:setTextColor(220, 0, 0) levelText.x = _W*0.5; levelText.y = scoreText.y + 20 fgGroup:insert(levelText) end local function updateTexts() scoreText.text = "Score: "..score levelText.text = "Level: "..wave end local function gameLoop(event) checkNSpawnEnemy() moveStarField() moveEnemy() moveWeapon() updateTexts() end
댓글 없음:
댓글 쓰기