Dans cette série en trois parties, je vais vous montrer comment créer un jeu inspiré du jeu populaire des années soixante, Space Invaders. En cours de route, vous en apprendrez plus sur les fonctionnalités de gestion de scènes de Corona, les minuteries, le déplacement d'un personnage, le moteur de physique intégré et l'utilisation de modules pour émuler des classes dans le langage de programmation Lua..
Ouvrez le simulateur Corona, cliquez sur Nouveau projet, et configurez le projet comme indiqué ci-dessous.
Sélectionnez un emplacement pour enregistrer votre projet et cliquez sur D'accord. Cela créera un dossier avec un certain nombre d'icônes et trois fichiers qui sont importants pour nous., main.lua, config.lua, et build.settings.
Nous examinerons chaque fichier dans les prochaines étapes..
le build.settings le fichier est responsable des propriétés de construction du projet.
Ouvrez ce fichier, supprimez son contenu et remplissez-le avec la configuration suivante.
settings = orientation = default = "portrait", pris en charge = "portrait",,
Dans build.settings, nous définissons l'orientation par défaut et limitons l'application
pour supporter uniquement une orientation portrait. Vous pouvez apprendre quels autres paramètres vous pouvez inclure dans
build.settings en explorant la documentation Corona.
le config.lua fichier gère la configuration de l'application. Comme nous l'avons fait avec build.settings,
ouvrez ce fichier, supprimez son contenu et ajoutez la configuration suivante.
application = contenu = largeur = 768, hauteur = 1024, échelle = "boîte aux lettres", fps = 30,
Ceci définit la largeur et la hauteur par défaut de l'écran, utilise boîte aux lettres pour redimensionner les images,
et définit le taux de trame à 30. Consultez la documentation Corona pour en savoir plus sur les autres propriétés que vous pouvez définir. config.lua.
le main.lua fichier est le fichier que l'application charge en premier et utilise pour amorcer l'application. Nous allons utiliser main.lua définir quelques paramètres par défaut pour l'application et utiliser le Compositeur bibliothèque pour charger le premier écran.
Si vous n'êtes pas familier avec la bibliothèque Corona Composer, je vous recommande de donner au
documentation une lecture rapide. En bref, Composer est la solution intégrée à la création et à la gestion de scènes (écrans) dans Corona. La bibliothèque offre aux développeurs un moyen simple de créer et de faire la transition entre des scènes individuelles..
Le nouveau module Composer remplace l'ancien et maintenant obsolète StoryBoard module. Un guide de migration est disponible pour vous aider à convertir vos anciens projets vers Composer..
Nous ne voulons pas que la barre d'état apparaisse dans notre application. Ajoutez l'extrait de code suivant à main.lua cacher la barre d'état.
display.setStatusBar (display.HiddenStatusBar)
Pour définir les points d'ancrage ou d'enregistrement par défaut, ajoutez le bloc de code suivant à main.lua.
display.setDefault ("anchorX", 0.5) display.setDefault ("anchorY", 0.5)
le anchorX
et ancrage
les propriétés spécifient où vous voulez que le point d’enregistrement de vos objets d’affichage soit. Notez que la valeur va de 0.0 à 1,0. Par exemple, si vous souhaitez que le point d’enregistrement soit en haut à gauche de l’objet d’affichage, définissez les deux propriétés sur 0.0.
Notre jeu utilisera Lua math.random
fonction pour générer des nombres aléatoires. Pour vous assurer que les chiffres sont vraiment aléatoires à chaque exécution de l'application, vous devez fournir une valeur de départ. Si vous ne fournissez pas de valeur de départ, l'application générera le même caractère aléatoire à chaque fois..
Lua's est une bonne valeur de départ os.time
fonctionner car il sera différent chaque fois que le
l'application est exécutée. Ajoutez l'extrait de code suivant à main.lua.
math.randomseed (os.time ())
Lors de l’utilisation de Corona, et en particulier du langage de programmation Lua, l’un des moyens d’avoir accès aux variables à l’échelle de l’application consiste à utiliser: global La manière dont vous déclarez une variable globale est en laissant le mot clé local
devant la déclaration de variable.
Par exemple, le bloc de code suivant déclare deux variables. La première est une variable locale qui ne serait disponible que dans le bloc de code dans lequel elle est définie. La seconde est une variable globale disponible n'importe où dans l'application..
local iamalocalvariable = "local" iamaglobalvariable = "global"
L'utilisation de variables globales est généralement considérée comme une mauvaise pratique. La raison la plus courante est d'éviter les conflits de noms, c'est-à-dire d'avoir deux variables du même nom. Nous pouvons résoudre ce problème en utilisant modules. Créez un nouveau fichier Lua, nommez-le gamedata.lua, et ajoutez le code suivant.
M = retour M
Nous créons simplement une table et la retournons. Pour utiliser cela, nous utilisons Lua exiger
méthode. Ajouter ce qui suit à main.lua.
local gameData = require ("gamedata")
Nous pouvons ensuite ajouter des clés à gameData
, qui sera le faux global variables. Regardez l'exemple suivant.
gameData.invaderNum = 1 - Utilisé pour garder une trace du niveau sur lequel nous sommes. gameData.maxLevels = 3 - Nombre maximal de niveaux dans lesquels le jeu disposera gameData.rowsOfInvaders = 4 - Combien de rangées d'invaders à créer
Chaque fois que nous voulons accéder à ces variables, tout ce que nous avons à faire est d’utiliser le exiger
fonction à charger gamedata.lua. Chaque fois que vous chargez un module en utilisant Lua exiger
fonction, il ajoute le moduleà un package.loaded
table. Si vous chargez un module, le package.loaded
La table est d'abord vérifiée pour voir si le module est déjà chargé. Si c'est le cas, il utilise le module mis en cache au lieu de le charger à nouveau..
Avant de pouvoir utiliser le module Composer, nous devons d’abord en avoir besoin. Ajouter ce qui suit à main.lua.
compositeur local = require ("compositeur")
Ajoutez l'extrait de code suivant à main.lua. Cela fera que l'application ira à la scène nommée début, qui est aussi un fichier Lua, start.lua. Vous n'avez pas besoin d'ajouter l'extension du fichier lorsque vous appelez le gotoScene
une fonction.
composer.gotoScene ("start")
Créez un nouveau fichier Lua nommé start.lua dans le répertoire principal du projet. Ce sera un fichier de composition, ce qui signifie que nous devons avoir besoin du module Composer et créer une scène de composition. Ajoutez l'extrait suivant à start.lua.
compositeur local = nécessite ("compositeur") scène locale = composer.newScene () retourne la scène
L'appel à newScene
fait du start.lua partie de la hiérarchie de la scène du compositeur. Cela signifie que cela devient un écran dans le jeu, que nous pouvons appeler des méthodes de composition sur.
A partir de là, le code ajouté à start.lua devrait être placé au-dessus de la revenir
déclaration.
Voici les variables locales dont nous aurons besoin pour la début scène.
startButton local - utilisé pour démarrer le jeu local pulsatingText = require ("pulsatingtext") - Module fournissant un effet de texte pulsant local starFieldGenerator = require ("starfieldgenerator") - Module qui génère le starFieldGenerator local starGenerator - Une instance du starFieldGenerator
Il est important de comprendre que les variables locales du bloc principal ne sont appelées qu'une seule fois.,
lorsque la scène est chargée pour la première fois. Lors de la navigation dans les scènes de composition, par exemple, en appelant des méthodes telles que gotoScence
, les variables locales seront déjà initialisées.
Il est important de se rappeler si vous voulez que les variables locales soient réinitialisées lorsque
revenir à une scène particulière. Le moyen le plus simple consiste à supprimer la scène de la hiérarchie du composeur en appelant le removeScence
méthode. La prochaine fois que vous accéderez à cette scène, celle-ci sera automatiquement rechargée. C'est l'approche que nous allons suivre dans ce tutoriel.
lepulsatingText
et starFieldGenerator
Nous allons créer deux modules personnalisés pour ajouter des fonctionnalités de type classe au projet. Créez deux nouveaux fichiers dans le dossier de votre projet nommé pulsatingtext.lua et starfieldgenerator.lua.
Si vous avez pris le temps de lire la documentation sur Composer, à laquelle j'ai déjà fait référence,
vous aurez remarqué que la documentation comprend un modèle qui contient tous les
événement compositeur. Les commentaires sont très utiles car ils indiquent quels événements utiliser pour initialiser des actifs, des minuteries, etc. Nous nous intéressons à la scène: créer
, scène: spectacle
, et scène: cacher
méthodes pour ce tutoriel.
scène: créer
Ajoutez l'extrait de code suivant à start.lua.
scène de fonction: create (événement) groupe local = self.view startButton = display.newImage ("new_game_btn.png", display.contentCenterX, display.contentCenterY + 100) groupe: insert (startButton) end
Cette méthode est appelée lorsque la vue de la scène n'existe pas encore. C'est là que vous devez initialiser les objets d'affichage et les ajouter à la scène. le groupe
la variable pointe vers auto.view
, qui est un GroupObject
pour toute la scène.
Nous créons le Bouton Start
en utilisant le Afficher
objets Nouvelle image
méthode, qui prend comme paramètres le chemin d'accès à l'image et le X
et y
valeurs pour la position de l'image sur l'écran.
scène: spectacle
Compositeur scène: spectacle
méthode a deux phases. le volonté la phase est appelée lorsque la scène est encore hors écran, mais est sur le point de s'afficher à l'écran. le fait la phase est appelée lorsque la scène est à l'écran. C’est là que vous voulez ajouter du code pour donner vie à la scène, démarrer des minuteries, ajouter des écouteurs d’événement, lire de la musique, etc..
Dans ce tutoriel, nous ne nous intéressons qu'au fait phase. Ajoutez l'extrait de code suivant à start.lua.
scène de fonction: show (événement) local phase = event.phase local previousScene = composer.getSceneName ("précédent") si (previousScene ~ = nil), puis composer.removeScene (previousScene) termine si (phase == "fait"), puis startButton : addEventListener ("tap", startGame) fin fin
Nous déclarons une variable locale phase
, que nous utilisons pour vérifier quelle phase du spectacle
La méthode est activée. Comme nous reviendrons sur cette scène plus tard dans le jeu, nous vérifions s’il existe une scène précédente et, le cas échéant, la supprimons. Nous ajoutons un robinet auditeur à la Bouton Start
qui appelle le démarrer jeu
une fonction.
scène: cacher
Compositeur scène: cacher
méthode a également deux phases. le volonté phase est appelée lorsque la scène est à l'écran, mais est sur le point de le quitter. Ici, vous voulez arrêter les minuteries, supprimer les écouteurs d’événement, arrêter l’audio, etc. fait la phase est appelée une fois que la scène est sortie de l'écran.
Dans ce tutoriel, nous ne nous intéressons qu’à la volonté phase dans laquelle on enlève le robinet auditeur de la Bouton Start
.
scène de fonction: masquer (événement) phase locale = événement.phase si (phase == "sera"), puis startButton: removeEventListener ("tap", startGame) end end
le démarrer jeu
fonction est appelée lorsque l'utilisateur appuie sur le Bouton Start
. Dans cette fonction, nous appelons le gotoScene
méthode du compositeur, qui nous mènera à la gamelevel scène.
fonction startGame () composer.gotoScene ("gamelevel") end
Créer un nouveau fichier nommé gamelevel.lua et ajoutez-y le code suivant. Cela devrait sembler familier. Nous créons une nouvelle scène et la retournons.
compositeur local = nécessite ("compositeur") scène locale = composer.newScene () retourne la scène
Nous devons ajouter des auditeurs de scène pour le créer
, spectacle
, et cacher
méthodes. Ajoutez le code suivant à start.lua.
scène: addEventListener ("créer", scène) scène: addEventListener ("show", scène) scène: addEventListener ("masquer", scène)
Si vous testez le jeu maintenant, vous devriez voir un écran noir avec un bouton sur lequel vous pouvez appuyer. Appuyez sur le bouton pour accéder à la gamelevel scène, qui n'est plus qu'un écran vide.
Cela met fin à cette partie de la série. Dans la prochaine partie, nous commencerons à implémenter le gameplay du jeu. Merci d'avoir lu et à la seconde partie de cette série.