픽업 Cocos2d-x로 미니 게임 상태 변화 구현
목차
1 소개
2 초기화부터 게임 오버 및 재개
4 향후 예정
소개
본 기사는, cocos2d-x 및 Cocos Code IDE를 도입해, 그림을 표시하거나 실기로 실행해 보거나 한 사람으로, 앞으로 게임의 상태 변화를 구현하고 싶은 사람을 위한, 각서입니다. 상태 정의에는 Lua의 배열 같은 것을 사용해, 실제로 터치 이벤트로 게임 오버, 재시작으로 그림의 위치를 되돌린다고 하는 처리를 설명합니다.
초기화부터 게임 오버 및 재개
아래 코드를 실행하면 터치 한 점으로 그림이 이동하여 배경 음악이 멈추고 게임 오버가됩니다. 게임 오버가 나타난 후 터치하면 그림이 초기 위치로 돌아가고 배경 음악이 재생됩니다.
GameScene.lua
local MUSIC_BGM = "background.mp3"
local EFFECT_GAMEOVER = "effect1.wav"
-- a)ゲーム状態の定義
local State = {Init = 1, Run = 2, Pause = 3, PreGameOver = 4, GameOver = 5}
local GameScene = class("GameScene",function()
return cc.Scene:create()
end)
function GameScene.create()
local scene = GameScene.new()
scene:addChild(scene:createLayer())
return scene
end
function GameScene:ctor()
self.visibleSize = cc.Director:getInstance():getVisibleSize()
self.origin = cc.Director:getInstance():getVisibleOrigin()
self.schedulerID = nil
-- b)ゲーム状態を初期状態にする
self.state = State.Init
end
function GameScene:playBgMusic()
-- BGMを再生
local bgMusicPath = cc.FileUtils:getInstance():fullPathForFilename(MUSIC_BGM)
cc.SimpleAudioEngine:getInstance():playMusic(bgMusicPath, true)
-- 効果音を先読み
local effectPath = cc.FileUtils:getInstance():fullPathForFilename(EFFECT_GAMEOVER)
cc.SimpleAudioEngine:getInstance():preloadEffect(effectPath)
end
function GameScene:createLayer()
local layer = cc.Layer:create()
-- ここから初期化開始
-- 背景
local sprite_background = cc.Sprite:create("farm.jpg")
sprite_background:setPosition(self.visibleSize.width/2, self.visibleSize.height/2)
sprite_background:setScale(1.2)
layer:addChild(sprite_background)
-- 絵
local sprite = cc.Sprite:create("land.png")
sprite:setPosition(100,100)
layer:addChild(sprite)
-- ゲームオーバー表示
local label_gameover = cc.Label:createWithTTF("GAME OVER","fonts/Marker Felt.ttf", 55)
label_gameover:setPosition(self.visibleSize.width/2,self.visibleSize.height/2)
label_gameover:setColor(cc.c3b(250, 250, 250))
label_gameover:enableShadow()
label_gameover:setOpacity(0)
layer:addChild(label_gameover)
-- タッチ開始時に呼ばれる
local function onTouchBegan(touch, event)
local location = touch:getLocation()
if self.state == State.Run then
-- ゲームオーバーにする処理
--DEBUG 絵の位置をタッチ位置に変更
sprite:setPosition(location)
-- BGMを止める
cc.SimpleAudioEngine:getInstance():stopMusic()
-- ゲーム終了通知音を鳴らす
local effectPath = cc.FileUtils:getInstance():fullPathForFilename(EFFECT_GAMEOVER)
cc.SimpleAudioEngine:getInstance():playEffect(effectPath)
-- d)ゲーム状態をゲーム終了前状態に変更
self.state = State.PreGameOver
-- ゲームオーバ表示をフェードインした後ゲームオーバー状態に変更
local fade = cc.FadeIn:create(2)
local function funcToGameOver(node)
-- e)ゲーム状態をゲームオーバーに変更
self.state = State.GameOver
end
local callFunc = cc.CallFunc:create(funcToGameOver)
label_gameover:runAction(cc.Sequence:create(fade,callFunc))
end
if self.state == State.GameOver then
-- ゲームオーバーになった後ゲームを再開する処理
-- BGMを再生
local bgMusicPath = cc.FileUtils:getInstance():fullPathForFilename(MUSIC_BGM)
cc.SimpleAudioEngine:getInstance():playMusic(bgMusicPath, true)
-- ゲームオーバー表示をフェードアウト
label_gameover:runAction(cc.FadeOut:create(2))
-- 絵の位置を初期化
sprite:setPosition(100,100)
-- f)ゲーム状態をランへ変更
self.state = State.Run
end
return true -- trueを返す
end
-- タッチイベントで呼ばれる関数を登録し、このレイヤーでのタッチイベント取得を有効化
local listener = cc.EventListenerTouchOneByOne:create()
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
local eventDispatcher = layer:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)
-- c)ゲーム状態をランに変更
self.state = State.Run
return layer
end
return GameScene
a) 게임의 상태를 정의, Lua의 연상 배열(정의 이름과 값이 조합된 배열)을 사용할 수 있습니다.
b) 변수 self.state에 Init 설정
c) 같은 변수에 Run 설정
d) 동일한 변수에 PreGameOver 설정
e) 동일한 변수에 GameOver 설정
f) 동일한 변수에 RUN 설정
향후 예정
파라파라 그림을 움직인다. 애니메이션에 대해 설명합니다.
Reference
이 문제에 관하여(픽업 Cocos2d-x로 미니 게임 상태 변화 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/CasualGameDev/items/c57e33cf8f617140298f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
본 기사는, cocos2d-x 및 Cocos Code IDE를 도입해, 그림을 표시하거나 실기로 실행해 보거나 한 사람으로, 앞으로 게임의 상태 변화를 구현하고 싶은 사람을 위한, 각서입니다. 상태 정의에는 Lua의 배열 같은 것을 사용해, 실제로 터치 이벤트로 게임 오버, 재시작으로 그림의 위치를 되돌린다고 하는 처리를 설명합니다.
초기화부터 게임 오버 및 재개
아래 코드를 실행하면 터치 한 점으로 그림이 이동하여 배경 음악이 멈추고 게임 오버가됩니다. 게임 오버가 나타난 후 터치하면 그림이 초기 위치로 돌아가고 배경 음악이 재생됩니다.
GameScene.lua
local MUSIC_BGM = "background.mp3"
local EFFECT_GAMEOVER = "effect1.wav"
-- a)ゲーム状態の定義
local State = {Init = 1, Run = 2, Pause = 3, PreGameOver = 4, GameOver = 5}
local GameScene = class("GameScene",function()
return cc.Scene:create()
end)
function GameScene.create()
local scene = GameScene.new()
scene:addChild(scene:createLayer())
return scene
end
function GameScene:ctor()
self.visibleSize = cc.Director:getInstance():getVisibleSize()
self.origin = cc.Director:getInstance():getVisibleOrigin()
self.schedulerID = nil
-- b)ゲーム状態を初期状態にする
self.state = State.Init
end
function GameScene:playBgMusic()
-- BGMを再生
local bgMusicPath = cc.FileUtils:getInstance():fullPathForFilename(MUSIC_BGM)
cc.SimpleAudioEngine:getInstance():playMusic(bgMusicPath, true)
-- 効果音を先読み
local effectPath = cc.FileUtils:getInstance():fullPathForFilename(EFFECT_GAMEOVER)
cc.SimpleAudioEngine:getInstance():preloadEffect(effectPath)
end
function GameScene:createLayer()
local layer = cc.Layer:create()
-- ここから初期化開始
-- 背景
local sprite_background = cc.Sprite:create("farm.jpg")
sprite_background:setPosition(self.visibleSize.width/2, self.visibleSize.height/2)
sprite_background:setScale(1.2)
layer:addChild(sprite_background)
-- 絵
local sprite = cc.Sprite:create("land.png")
sprite:setPosition(100,100)
layer:addChild(sprite)
-- ゲームオーバー表示
local label_gameover = cc.Label:createWithTTF("GAME OVER","fonts/Marker Felt.ttf", 55)
label_gameover:setPosition(self.visibleSize.width/2,self.visibleSize.height/2)
label_gameover:setColor(cc.c3b(250, 250, 250))
label_gameover:enableShadow()
label_gameover:setOpacity(0)
layer:addChild(label_gameover)
-- タッチ開始時に呼ばれる
local function onTouchBegan(touch, event)
local location = touch:getLocation()
if self.state == State.Run then
-- ゲームオーバーにする処理
--DEBUG 絵の位置をタッチ位置に変更
sprite:setPosition(location)
-- BGMを止める
cc.SimpleAudioEngine:getInstance():stopMusic()
-- ゲーム終了通知音を鳴らす
local effectPath = cc.FileUtils:getInstance():fullPathForFilename(EFFECT_GAMEOVER)
cc.SimpleAudioEngine:getInstance():playEffect(effectPath)
-- d)ゲーム状態をゲーム終了前状態に変更
self.state = State.PreGameOver
-- ゲームオーバ表示をフェードインした後ゲームオーバー状態に変更
local fade = cc.FadeIn:create(2)
local function funcToGameOver(node)
-- e)ゲーム状態をゲームオーバーに変更
self.state = State.GameOver
end
local callFunc = cc.CallFunc:create(funcToGameOver)
label_gameover:runAction(cc.Sequence:create(fade,callFunc))
end
if self.state == State.GameOver then
-- ゲームオーバーになった後ゲームを再開する処理
-- BGMを再生
local bgMusicPath = cc.FileUtils:getInstance():fullPathForFilename(MUSIC_BGM)
cc.SimpleAudioEngine:getInstance():playMusic(bgMusicPath, true)
-- ゲームオーバー表示をフェードアウト
label_gameover:runAction(cc.FadeOut:create(2))
-- 絵の位置を初期化
sprite:setPosition(100,100)
-- f)ゲーム状態をランへ変更
self.state = State.Run
end
return true -- trueを返す
end
-- タッチイベントで呼ばれる関数を登録し、このレイヤーでのタッチイベント取得を有効化
local listener = cc.EventListenerTouchOneByOne:create()
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
local eventDispatcher = layer:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)
-- c)ゲーム状態をランに変更
self.state = State.Run
return layer
end
return GameScene
a) 게임의 상태를 정의, Lua의 연상 배열(정의 이름과 값이 조합된 배열)을 사용할 수 있습니다.
b) 변수 self.state에 Init 설정
c) 같은 변수에 Run 설정
d) 동일한 변수에 PreGameOver 설정
e) 동일한 변수에 GameOver 설정
f) 동일한 변수에 RUN 설정
향후 예정
파라파라 그림을 움직인다. 애니메이션에 대해 설명합니다.
Reference
이 문제에 관하여(픽업 Cocos2d-x로 미니 게임 상태 변화 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/CasualGameDev/items/c57e33cf8f617140298f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
local MUSIC_BGM = "background.mp3"
local EFFECT_GAMEOVER = "effect1.wav"
-- a)ゲーム状態の定義
local State = {Init = 1, Run = 2, Pause = 3, PreGameOver = 4, GameOver = 5}
local GameScene = class("GameScene",function()
return cc.Scene:create()
end)
function GameScene.create()
local scene = GameScene.new()
scene:addChild(scene:createLayer())
return scene
end
function GameScene:ctor()
self.visibleSize = cc.Director:getInstance():getVisibleSize()
self.origin = cc.Director:getInstance():getVisibleOrigin()
self.schedulerID = nil
-- b)ゲーム状態を初期状態にする
self.state = State.Init
end
function GameScene:playBgMusic()
-- BGMを再生
local bgMusicPath = cc.FileUtils:getInstance():fullPathForFilename(MUSIC_BGM)
cc.SimpleAudioEngine:getInstance():playMusic(bgMusicPath, true)
-- 効果音を先読み
local effectPath = cc.FileUtils:getInstance():fullPathForFilename(EFFECT_GAMEOVER)
cc.SimpleAudioEngine:getInstance():preloadEffect(effectPath)
end
function GameScene:createLayer()
local layer = cc.Layer:create()
-- ここから初期化開始
-- 背景
local sprite_background = cc.Sprite:create("farm.jpg")
sprite_background:setPosition(self.visibleSize.width/2, self.visibleSize.height/2)
sprite_background:setScale(1.2)
layer:addChild(sprite_background)
-- 絵
local sprite = cc.Sprite:create("land.png")
sprite:setPosition(100,100)
layer:addChild(sprite)
-- ゲームオーバー表示
local label_gameover = cc.Label:createWithTTF("GAME OVER","fonts/Marker Felt.ttf", 55)
label_gameover:setPosition(self.visibleSize.width/2,self.visibleSize.height/2)
label_gameover:setColor(cc.c3b(250, 250, 250))
label_gameover:enableShadow()
label_gameover:setOpacity(0)
layer:addChild(label_gameover)
-- タッチ開始時に呼ばれる
local function onTouchBegan(touch, event)
local location = touch:getLocation()
if self.state == State.Run then
-- ゲームオーバーにする処理
--DEBUG 絵の位置をタッチ位置に変更
sprite:setPosition(location)
-- BGMを止める
cc.SimpleAudioEngine:getInstance():stopMusic()
-- ゲーム終了通知音を鳴らす
local effectPath = cc.FileUtils:getInstance():fullPathForFilename(EFFECT_GAMEOVER)
cc.SimpleAudioEngine:getInstance():playEffect(effectPath)
-- d)ゲーム状態をゲーム終了前状態に変更
self.state = State.PreGameOver
-- ゲームオーバ表示をフェードインした後ゲームオーバー状態に変更
local fade = cc.FadeIn:create(2)
local function funcToGameOver(node)
-- e)ゲーム状態をゲームオーバーに変更
self.state = State.GameOver
end
local callFunc = cc.CallFunc:create(funcToGameOver)
label_gameover:runAction(cc.Sequence:create(fade,callFunc))
end
if self.state == State.GameOver then
-- ゲームオーバーになった後ゲームを再開する処理
-- BGMを再生
local bgMusicPath = cc.FileUtils:getInstance():fullPathForFilename(MUSIC_BGM)
cc.SimpleAudioEngine:getInstance():playMusic(bgMusicPath, true)
-- ゲームオーバー表示をフェードアウト
label_gameover:runAction(cc.FadeOut:create(2))
-- 絵の位置を初期化
sprite:setPosition(100,100)
-- f)ゲーム状態をランへ変更
self.state = State.Run
end
return true -- trueを返す
end
-- タッチイベントで呼ばれる関数を登録し、このレイヤーでのタッチイベント取得を有効化
local listener = cc.EventListenerTouchOneByOne:create()
listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
local eventDispatcher = layer:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, layer)
-- c)ゲーム状態をランに変更
self.state = State.Run
return layer
end
return GameScene
파라파라 그림을 움직인다. 애니메이션에 대해 설명합니다.
Reference
이 문제에 관하여(픽업 Cocos2d-x로 미니 게임 상태 변화 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/CasualGameDev/items/c57e33cf8f617140298f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)