Cómo utilizar Cocos Code IDE y Cocos2d-x para desarrollar el juego "No One Less"
Abra Cocos Code IDE, cambie al entorno de trabajo Lua
Seleccione el menú, cree un nuevo proyecto Cocos Lua e ingrese el nombre del proyecto: NoOneLeftBehind.
p>Haga clic en Siguiente, configure la orientación y resolución de la pantalla y confirme la finalización.
En este punto, puede hacer clic en el botón Ejecutar. Si no hay problemas, aparecerá una demostración de muestra. surgir.
El juego está un poco distorsionado debido al cambio de resolución.
2. Lógica del juego
Ahora podemos añadir nuestro propio código al proyecto del juego. Dado que los detalles del código del juego no son el foco de este artículo, aquí solo presentamos brevemente el principio de implementación de "nadie falta". El código fuente de todo el proyecto del juego se puede descargar desde mi Github.
A.main.lua es la entrada al juego. En la función main() podemos encontrar el código de salto de escena. Su interfaz es consistente con Cocos2d-x, por lo que podemos comenzar fácilmente. Aquí cambiamos la primera escena a la escena del menú principal.
--Crear escena
escena local = require("MenuScene")
menuScene local = escena.createScene()
Si cc.Director.getInstance(): getRunningScene() luego
cc.Director: getInstance(): replaceScene(menuScene)
else
cc.Director. GetInstance(): runWithScene(menuScene)
end
B.MenuScene.lua es el menú principal del juego, donde se pueden seleccionar cuatro modos de juego de dificultad. Puede crear menús de esta manera.
--Crear menú
menú de función localCallbackOpenNormal()
cc.Director: getInstance(): replaceScene( require("GameScene").createScene(2 ))
end
local normal = cc.MenuItemImage: create("normal.png", "normal.png")
normal.setPosition(0 , 150)
normal: RegisterScriptTapHandler(menuCallbackOpenNormal)
...
menú local = cc.Menu: crear(normal, pesadilla, infierno, infierno)
self: addChild(menu)
C.GameScene.lua es la escena principal del juego. El número de héroes que se muestran al mismo tiempo se establece pasando heroCount.
getVisibleSize()
inicio localY = 30
brecha local = (visibleSize.height - startY) / self._heroCount
para i=1, self.do
controlador local = require("HeroController").createController(self, startY gap * (i - 1))
table.insert(self._controllers, i, controlador)
end
end
D. Aquí resumimos al héroe y su entorno. Luego, se llama a la función onUpdate de HeroController en cada cuadro de GameScene para determinar si se deben generar nuevos obstáculos al detectar un temporizador aleatorio.
-- Crear bloque
función HeroController: onUpdate()
self.frameIndex = self.frameIndex 1
if self.frameIndex gt; = self.nextKeyFrameIndex luego
bloque local = require("Block").new()
bloque:init()
self._layer: addChild(bloque)
bloque: setPositionY(self._positionY bloque: getContentSize().height / 2)
self: resetTimer()
fin p>
fin
E.Motor de física. La colisión entre el héroe y el suelo y los bloques utiliza el motor de física integrado Cocos2d-x. El siguiente código refleja la detección de colisiones para Hero y Block.
-- Detección de colisiones
self.touchListener: RegisterScriptHandler(onTouchBegan, cc.Handler.EVENT_TOUCH_BEGAN)
cc.Director: getInstance()
Motor de física integrado Cocos2d-x.
Director: getInstance(): getEventDispatcher(): addEventListenerWithSceneGraphPriority(self.touchListener, self)
Función local onContactBegin(contacto)
self: unscheduleUpdate()
cc.EventListenerPhysicsContact: create();
self.contactListener: RegisterScriptHandler(onContactBegin, cc.Handler.EVENT_PHYSICS_ CONTACT_BEGIN);
local eventDispatcher = self: getEventDispatcher()
eventDispatcher: addEventListenerWithSceneGraphPriority(self.contactListener, self);
La clase F.Block encapsula el obstáculo que se mueve hacia la izquierda en cada cuadro. Si va más allá de la pantalla, se eliminará.
--Bloque móvil
actualización de función (dt)
self: setPositionX(self: getPositionX() - 3.5)
if (self: getPositionX() lt; 0) luego
self: unscheduleUpdate()
self: removeFromParentAndCleanup()
end
end
self.scheduleUpdateWithPriorityLua(update, 0)
3. Paquete para cada plataforma
Haga clic en el botón Paquete,
Si Aún no se ha agregado ningún código local; se le pedirá que agregue un código local.
A. Paquete de plataforma Android
Seleccione el paquete como apk, seleccione la firma de depuración o la firma personalizada, seleccione la versión del SDK y confirme la generación.
Embalaje de plataforma B.iOS
Seleccione el empaquetado como ipa, seleccione el certificado y la plataforma y confirme la generación.