Red de conocimiento informático - Material del sitio web - Cómo utilizar Cocos Code IDE y Cocos2d-x para desarrollar el juego "No One Less"

Cómo utilizar Cocos Code IDE y Cocos2d-x para desarrollar el juego "No One Less"

1. Cree un nuevo proyecto

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

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.