Portage de jeux ActionScript sur iOS avec le SDK Corona partie 1

Ce tutoriel examinera le portage d’un jeu Flash / Flex dans le SDK Corona. Plus précisément, nous allons transférer d'ActionScript vers Lua, l'objectif final étant de jouer à des jeux autrefois uniquement Flash sur l'iPhone. En plus de démontrer les différences de langage et d'API, cette série de didacticiels tiendra également compte des restrictions matérielles telles que la taille de l'écran et le manque de boutons physiques sur l'iPhone..

Qu'est-ce que Corona??

Avant d’entrer dans le codage, j’aimerais donner un aperçu rapide du logiciel que nous allons utiliser.
être en utilisant. Corona SDK est un produit d'Ansca Mobile pour la création de jeux sur iPhone, iPod Touch, iPad et Android. Au moment d'écrire ces lignes, une version d'essai gratuite et illimitée du kit est disponible ici. Il inclut toutes les fonctionnalités de la version payante, à l'exception de la publication dans les magasins d'applications respectifs des appareils iPhone et Android. Ce tutoriel sera une excellente introduction à la puissance et à l'efficacité de Corona.

Le jeu

Dans ce tutoriel, nous allons porter un jeu alimenté par flixel d’Andreas Zecher. Ce jeu a été créé avec le tutoriel d'Andreas sur la bibliothèque open-source flixel et le langage ActionScript. Le code original est disponible ici (Andreas a eu la gentillesse de le publier en open source). Si vous souhaitez créer des jeux flash, assurez-vous de consulter le didacticiel original. Il y a quelques informations très utiles là!

Lua Language

Le kit de développement logiciel d'Ansca Mobile utilise le langage de programmation Lua et étend leur API. Lua est une langue très propre. Tout en s'adressant aux débutants, je l’ai trouvé très puissant avec très peu de code. Lua n'est pas un
orienté objet, mais il peut être fait pour suivre le modèle orienté objet avec un réglage fin.

Ceci étant dit, examinons notre premier obstacle: Lua est syntaxiquement différent d'ActionScript..

Les variables dans Lua sont gérées différemment que dans ActionScript. Dans ActionScript, les variables sont typées de manière statique. Cela signifie qu'ils déclarent leur type et ne stockent que les valeurs de ce type, à moins d'être explicitement convertis..

? var_ship privé: Navire; // Les variables déclarent leur type. Cette variable est de type "Ship" private var _aliens: FlxGroup; private var _bullets: FlxGroup; private var _scoreText: FlxText; private var _gameOverText: FlxText; private var _spawnTimer: Number; private var _spawnInterval: Number = 2.5;? 

En lua, les variables sont typées dynamiquement. Une variable Lua peut contenir n'importe quel type à tout moment. Un autre
Ce qu'il faut remarquer, c'est que les variables de Lua sont locales ou globales. Une variable est locale
(uniquement accessible) à son fichier .lua ou à sa fonction, etc. s’il est précédé du préfixe "local"
déclaration de la variable. Sinon, sa portée est considérée comme "globale". La meilleure pratique à Lua est de toujours utiliser
variables locales. Ce tutoriel sera conforme à cette pratique.

? local _ship - Les variables ne déclarent pas leur type. Cette variable peut être un "Ship" ou une chaîne. Plus tard, il pourrait être utilisé pour stocker un entier ou un tableau. local _aliens local _bullets local _scoreText local _gameOverText local _spawnTimer = nil - Cette variable a une affectation et une déclaration sur la même ligne. local _spawnInterval = 2.5 - Il en va de même pour celui-ci? 

Comme vous l'avez probablement déjà remarqué, les commentaires sont gérés différemment dans Lua et dans ActionScript..

 // Ceci est un commentaire dans ActionScript / * Ceci est un commentaire multiligne dans ActionScript * /
 -- Ceci est un commentaire en lua - [[Ceci est un commentaire multiligne en lua -]]

Une chose importante à savoir sur les commentaires dans Lua est que tout ce qui suit "-" est un commentaire sauf
pour "--[[". Cela permet une astuce soignée. Si vous ajoutez un tiret supplémentaire au début de la multiligne
comment "--- [[", il commente la partie multiligne. Cela se produit parce que tout après le premier
deux tirets est un commentaire. Maintenant, regardez le commentaire final "-]]". C'est déjà un commentaire parce que ça aussi
est après deux tirets. Cela devient effectivement un commutateur pour activer et désactiver des morceaux de code!

 --[[Ceci est un commentaire -]] --- [[Ceci est un code et sera exécuté comme tel. Dans ce cas, une erreur serait renvoyée. -]]

Les boucles, les crochets et les opérateurs sont définis par des mots en Lua:

 // ActionScript si (_spawnTimer < 0)  spawnAlien(); resetSpawnTimer(); 
 -- lua if (_spawnTimer < 0) then spawnAlien() resetSpawnTimer() end

Lua utilise "if-then", "else", "elseif-then", "end", "and", "or", etc. Notez également que Lua n'utilise pas
points-virgules pour terminer chaque ligne. Sans tous les crochets et les points-virgules, le code Lua semble beaucoup plus
comme la langue anglaise que d'autres langages de programmation.

Une autre chose à noter avant de commencer est que Lua n’a pas de prise en charge des raccourcis d’affectation..

 // ActionScript _spawnInterval * = 0.95; // Ceci est autorisé dans ActionScript
 -- lua _spawnInterval * = 0.95 - Cela entraînera une erreur dans lua _spawnInterval = _spawnInterval * 0.95 - C'est le code Lua correct

Début de portage

Maintenant que nous comprenons certaines des différences fondamentales entre ActionScript et Lua, nous pouvons commencer la
processus de transfert du jeu entre eux. Le code source de ce tutoriel et attaché à ce message inclut le
le code source original et le code final du projet d'aujourd'hui.

Syntaxe

Pour faciliter le portage, nous allons commencer par convertir toute la syntaxe de notre source.
fichiers, sans nous préoccuper de la logique réelle de l'application. De cette façon, quand on commence à travailler sur la logique, le
le code sera déjà correctement formaté. Commençons le processus avec le fichier Main.as, qui ressemble
quelque chose comme ça:

 package import org.flixel. *; import de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")]] [Frame (factoryClass = "Preloader")] classe publique Main étend FlxGame fonction publique Main (): void super (640, 480, PlayState, 1); 

Il n'y a pas grand chose à faire ici. Nous n'avons pas besoin de la déclaration "package", nous pouvons donc supprimer les lignes de code supérieure et inférieure.

 import org.flixel. *; import de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")]] [Frame (factoryClass = "Preloader")] classe publique Main étend FlxGame fonction publique Main (): void super (640, 480, PlayState, 1); 

Lua n’ayant pas de classes, nous pouvons supprimer la ligne "public class Main extend FlxGame" et c’est
parenthèses correspondantes.

 import org.flixel. *; import de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")]] [Frame (factoryClass = "Preloader")] fonction publique Main (): void super (640, 480, PlayState, 1); 

Nous pouvons maintenant travailler sur la fonction Main (). Tout d'abord, notez la déclaration "publique" de la méthode.
Lua n'a pas de type de fonction séparé, nous pouvons donc le supprimer. Rappelez-vous que dans Lua, fonctions
ne déclarez pas leur type de retour. Il y a un mot clé ": void" à la fin de la déclaration de fonction.
Cela signifie que cette fonction ne renverra pas de valeur, ce qui n'est pas nécessaire dans lua. Donc on peut laisser tomber
il. Vous voudrez peut-être commenter plus tard pour référence. Enfin, supprimez les crochets autour de
Principale(). En lua, nous utilisons des mots. Ajouter "fin" à la fin de la fonction.

 import org.flixel. *; import de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")]] [Frame (factoryClass = "Preloader")] function Main () -: void super (640, 480, PlayState, 1); fin

Pour conclure, supprimez tous les points-virgules ";" et commentez toutes les lignes de code. Ce
Ainsi, nous pouvons commencer à porter la logique sans générer d'erreurs.

 --import org.flixel. * --import de.pixelate.flixelprimer. * - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Frame (factoryClass = "Preloader")] - fonction Main () -: void - super (640, 480, PlayState, 1) --end

À ce stade, vous souhaiterez créer un dossier de projet pour contenir vos fichiers. J'ai appelé le mien
"Tireur d'alien". C’est le dossier que vous passerez à Corona lorsque vous serez prêt à exécuter votre
code. À l’intérieur du dossier, Corona recherche le fichier "main.lua". Corona est sensible à la casse, alors vous
ne pas mettre la première lettre en majuscule comme dans "Main.as". Enregistrez le code ci-dessus sous main.lua.

Passons au fichier suivant. Aujourd'hui, nous ne travaillerons qu'avec deux des fichiers sources. La deuxième
Le fichier se trouve sous "de / pixelate / flixelprimer / PlayState.as" dans le code source joint. Ce fichier est où
tout le gameplay est géré. En tant que tel, c'est le fichier le plus long. Nous allons modifier la syntaxe par petits morceaux.
Tout comme le fichier principal, ce code contient une déclaration de paquet et de classe. Supprimer les lignes qui commencent
avec "package" et "public class PlayState" et leurs crochets.

Nous voyons maintenant une liste de variables locales.

? var_ship privé: Navire; var_aliens privés: FlxGroup; private var _bullets: FlxGroup; private var _scoreText: FlxText; private var _gameOverText: FlxText; private var _spawnTimer: Number; private var _spawnInterval: Number = 2.5;? 

Rappelez-vous de tout à l'heure que les variables de Lua sont locales ou globales, et qu'elles n'ont pas besoin
déclarer leur type. Modifiez les variables pour qu'elles ressemblent à ceci:

? local _ship; _aliens locaux; balles locales; _scoreText local; local _spawnInterval = 2.5;? 

Maintenant, descendez dans la liste des déclarations de fonctions, en commençant par create (). Supprimer toutes les déclarations de type de fonction, telles que "public"
ou "écraser public". Mettez en commentaire ou supprimez tous les types de retour pour les fonctions. Presque toutes ces fonctions sont ": void". Remplacez les crochets de la fonction par "end". Create () devrait maintenant ressembler à ceci:

? function create () -: void FlxG.score = 0; bgColor = 0xFFABCC7D; _ship = new Ship (); ajouter (_ship); _aliens = new FlxGroup (); ajouter (_aliens); _bullets = new FlxGroup (); ajouter (_bullets); _scoreText = new FlxText (10, 8, 200, "0"); _scoreText.setFormat (null, 32, 0xFF597137, "left"); add (_scoreText); resetSpawnTimer (); super.create (); fin? 

Lorsque nous arrivons à des fonctions comme update (), nous devons également traiter les instructions if-then. Juste
remplacer le support d'ouverture "" par "then", et le support de fermeture "" par "end". Tout "&&" devrait
être remplacé par "et". "||" devrait être remplacé par "ou".

? function update () -: void FlxU.overlap (_aliens, _bullets, overlapAlienBullet); FlxU.overlap (_aliens, _ship, overlapAlienShip); if (FlxG.keys.justPressed ("SPACE") et _ship.dead == false), puis spawnBullet (_ship.getBulletSpawnPosition ()); end if (FlxG.keys.ENTER et _ship.dead) alors FlxG.state = new PlayState (); end _spawnTimer - = FlxG.elapsed; si (_spawnTimer < 0) then spawnAlien(); resetSpawnTimer(); end super.update(); end? 

Certaines fonctions, telles que overlapAlienBullet (), prennent des arguments. Dans ActionScript, nous devons déclarer le type d'arguments que nous allons transmettre. La fonction overlapAlienBullet () prend une variable "alien" (de type Alien) et une variable nommée "bullet" (de type Bullet). Ces déclarations de type doivent être supprimées. OverlapAlienBullet () a également des variables locales. Supprimez également les déclarations de type de celles-ci. Remarque: Les déclarations de variables locales doivent avoir le mot-clé local devant elles..

Avant:

? fonction privée overlapAlienBullet (alien: Alien, bullet: Bullet): void var emitter: FlxEmitter = createEmitter (); emitter.at (étranger); alien.kill (); bullet.kill (); FlxG.play (SoundExplosionAlien); FlxG.score + = 1; _scoreText.text = FlxG.score.toString (); ? 

Après:

? fonction overlapAlienBullet (alien, bullet) -: void émetteur local = createEmitter (); emitter.at (étranger); alien.kill (); bullet.kill (); FlxG.play (SoundExplosionAlien); FlxG.score + = 1; _scoreText.text = FlxG.score.toString (); fin? 

La toute dernière fonction, createEmitter (), a une déclaration for-do. Nous n'utiliserons pas cette fonction
dans le dernier jeu, mais nous devrions jeter un oeil à cette déclaration:

 pour (var i: int = 0; i < particles; i++)  var particle:FlxSprite = new FlxSprite(); particle.createGraphic(2, 2, 0xFF597137); particle.exists = false; emitter.add(particle); 

La ligne de code supérieure crée une variable "i" avec la valeur 0. Le code entre crochets se répète ensuite.
lui-même tandis que "i" est inférieur à la variable "particules". Chaque boucle, la variable "i" obtient
incrémenté de 1.

 pour i = 0, les particules-1 font-elles? fin

L’instruction Lua ci-dessus crée une variable "i" avec la valeur 0. Le code entre parenthèses
se répète jusqu'à ce que "i" soit égal à la variable "particules" moins 1 (identique à la vérification si "i"
est inférieure à "particules"). La variable "i" est également incrémentée de 1 à chaque boucle.

Nous pouvons maintenant conclure en nous limitant à la syntaxe. Supprimez tous les points-virgules. Commentez tout le code en tant que
avec le fichier principal. Ajouter des commentaires d'une seule ligne avant des lignes de code individuelles.

 --local _ship --local _aliens --local _bullets --local _scoreText --local _spawnInterval = 2.5

Ajoutez des commentaires multilignes autour des fonctions et des morceaux de code.

 --[[function create () -: void FlxG.score = 0 bgColor = 0xFFABCC7D _ship = new Ship () ajouter (_ship) _aliens = new FlxGroup () ajouter (_aliens) _bullets = nouveau FlxGroup () ajouter (_bullets) _scoreText = new FlxText (10, 8, 200, "0") _scoreText.setFormat (null, 32, 0xFF597137, "à gauche") ajoute (_scoreText) resetSpawnTimer () super.create () end -]]

Continuez et enregistrez ce fichier sous le nom PlayState.lua dans votre dossier de projet. Ne le mettez pas dans un sous-répertoire
comme le code source. Corona a des problèmes avec les modules dans les sous-répertoires.

Modules Et Requérant

Nous sommes maintenant prêts à commencer à porter la logique derrière ce jeu. Parlons d'abord de la logique de fichier.
Dans notre source ActionScript, le fichier Main.as est exécuté en premier. Les autres fichiers, tels que
PlayState.as, sont appelés des packages. Ces packages sont importés dans le fichier principal. A Lua, le
Le fichier main.lua est exécuté en premier. Les autres fichiers sont appelés modules et sont nécessaires dans la
fichier principal. Dans ActionScript, les packages ont une déclaration de package. En Lua, les modules doivent aussi avoir un
déclaration ou le fichier principal ne peut pas les voir. Cela signifie que nous devons modifier notre fichier PlayState.lua..
En haut du fichier ou de tout autre fichier de module, ajoutez cette ligne pour que main.lua puisse travailler avec
module.

 module (?, package.seeall)

Revenons maintenant au fichier main.lua afin que nous puissions charger notre module. Cela devrait ressembler à ceci:

 --import org.flixel. * --import de.pixelate.flixelprimer. * - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Frame (factoryClass = "Preloader")] - fonction Main () -: void - super (640, 480, PlayState, 1) --end

Nous constatons que le code ActionScript d’origine a importé tous les packages de "org / flixel" et
"de / pixelate / flixelprimer". Remplacez ces lignes pour faire ceci:

 local PlayState = require ("PlayState") - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Frame (factoryClass = "Preloader")] --function Main () -: void - super (640, 480, PlayState, 1) - fin

Ce code crée une nouvelle variable (locale au fichier principal) destinée à contenir le module requis. nous
peut maintenant accéder à n'importe quel code du fichier PlayState.lua de la variable "PlayState".

OOP à Lua

Avant de continuer avec main.lua, nous devons apporter quelques modifications à PlayState.lua. Si on regarde le
fichier PlayState.as original, nous voyons que toutes les fonctionnalités sont encapsulées dans une classe
appelé PlayState. Nous ne pouvons pas créer de classes avec lua, mais nous pouvons organiser notre code de manière à rendre
il est orienté objet. En encapsulant toutes les fonctionnalités avec une fonction constructeur, nous pouvons atteindre
le même effet. En laissant tout votre code commenté, ajoutez ces lignes autour de tout le code.

 fonction PlayState ()? le code va ici? fin

Désormais, toutes les fonctions seront locales à la fonction PlayState. Ces fonctions deviennent privées pour
une sorte d'instance PlayState créée lors de l'appel de PlayState (). Si vous vouliez imiter un
méthode de classe, vous pouvez mettre la déclaration en dehors de la fonction. Nous allons apprendre dans les leçons ultérieures
comment créer des méthodes d'instance ici aussi.

Voici un exemple de module démontrant cette fonctionnalité:

 module (?, package.seeall) local numberOfInstances = 0 - cette fonction imite une fonction de méthode de classe getNumberOfInstances () return numberOfInstances end - cette fonction imite une fonction de classe Instance () instance locale =  numberOfInstances = numberOfInstances + 1 instance localeNumber = numberOfInstances - cette fonction imite une fonction de méthode d'instance Instance: getInstanceNumber () return instanceNumber end - cette fonction imite une méthode de méthode privée create () return Instance end - elle appelle la méthode privée après que toutes les fonctions ont été déclarées. create () end

Si vous voulez jouer avec le code ci-dessus, voici un fichier main.lua démontrant son utilisation (en supposant que
module est enregistré sous test.lua):

 test local = requis ("test") instance1 locale = test.Instance () instance2 locale = test.Instance () instance3 locale = test.Instance () instance locale4 = test.Instance () print (test.getNumelOfInstances ()) print (instance2: getInstanceNumber ())

Notez que les fonctions du module utilisent la syntaxe à points, tandis que toutes les autres fonctions de Lua (et même certaines d’entre elles).
leurs déclarations comme nous venons de le voir) utilisent deux points (:) à la place du point. Cela peut être déroutant, comme
les propriétés de Lua sont accessibles en utilisant la syntaxe à points. Pour cette raison, nous avons laissé tous les appels de fonction
seul en portant la syntaxe plus tôt. Nous déciderons s'il faut utiliser deux points ou un point pour chaque cas
nous rencontrons.

Maintenant que nous avons toutes les fonctionnalités de PlayState.lua dans la fonction PlayState (), toutes les
les fonctions imitent maintenant les fonctions privées dans ActionScript. Qui est exactement
ce que nous voulons. Ajouter une variable locale PlayState en haut de la fonction.

 function PlayState () local PlayState = ? fin

Maintenant, allez-y, décommentez la fonction create () et déplacez-la vers le bas (juste avant
la fin finale). Ajoutez des commentaires sur une seule ligne à toutes les lignes de la fonction afin que nous puissions toujours
voir la logique, mais il ne jette aucune erreur.

 module (?, package.seeall) fonction PlayState () local PlayState = ? un tas de code commenté? function create () -: void --FlxG.score = 0 --bgColor = 0xFFABCC7D --_ ship = nouveau Ship () --add (_ship) --_ aliens = nouveau FlxGroup () --add (_aliens) - _bullets = new FlxGroup () --add (_bullets) --_ scoreText = new FlxText (10, 8, 200, "0") --_ scoreText.setFormat (null, 32, 0xFF597137, "left") --add (_scoreText ) --resetSpawnTimer () --super.create () end end

Déplacement vers l'API Corona

Le jeu ActionScript original a été créé à l’aide de la bibliothèque flixel décrite au début de cette
leçon. Malheureusement, il n'y a pas de port de Lua de flixel à ce jour. Donc, nous serons
implémentation de toute la logique flixel avec l'API Corona SDK.

La première chose à noter est de retour dans le fichier main.lua. En flixel, la fonction Main () automatiquement
est appelé lorsque le programme est exécuté. Dans Corona, le fichier main.lua s’exécute de haut en bas..
Donc, pour obtenir le même effet que dans le source, ajoutez Main () à la fin de main.lua.

 local PlayState = require ("PlayState") - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Frame (factoryClass = "Preloader")] fonction Main () -: void - - super (640, 480, PlayState, 1) fin Main ()

De plus, dans la plupart des jeux flixel, un pré-chargeur avec le logo flixel est affiché pendant que le programme est en cours.
chargement. Nous n’avons pas besoin de cela pour notre application, nous ne créerons donc pas de fichier preloader.lua. Les lignes ajoutant
le préchargement et le réglage de la taille / arrière-plan du programme peuvent être supprimés (nous ne pouvons pas modifier l'application
Taille).

 local PlayState = require ("PlayState"), fonction Main () -: void - super (640, 480, PlayState, 1) end Main ()

Pendant que nous sommes ici, créez un nouveau PlayState dans Main ().

 local PlayState = require ("PlayState"), fonction Main () -: annuler PlayState.PlayState () end Main ()

En revenant sur PlayState.lua, nous remarquons que create () n’est pas appelé. Dans flixel, create () et
update () est automatiquement traité. Nous devrons nous en occuper nous-mêmes à Corona. Ajouter un
appel à create () avant la dernière fin.

 module (?, package.seeall) fonction PlayState () local PlayState = ? un tas de code commenté? function create () -: void? commenté la logique create ()? end create () end

Avant de poursuivre, examinons ce que nous avons jusqu’à présent. Nous avons maintenant un fichier main.lua qui
nécessite PlayState.lua et exécute PlayState (). PlayState () crée une nouvelle instance PlayState puis
appels create (). Create () est l'endroit où tout le code d'installation du jeu va. Nous avons maintenant un cadre
pour construire notre logique autour.

Objets d'affichage

Nous devons maintenant commencer à ajouter des fonctionnalités à notre fonction create () pour configurer notre jeu. Commençons par
créer le fond de couleur verte du jeu. Dans notre code, nous avons commenté cette ligne dans notre
Fonction create ().

 --bgColor = 0xFFABCC7D;

Cela nous indique la valeur hexadécimale de la couleur verte d'origine. Un moyen facile de faire un fond
Corona consiste à créer un rectangle coloré de la même taille que l’écran. Cela peut être fait en utilisant
Les objets d'affichage de Corona. Semblable à ActionScript, Corona nous fournit une API permettant d’afficher des objets
l'écran. Nous pouvons utiliser le module d’affichage pour de nombreuses tâches différentes. Il peut être utilisé pour créer
nouveaux objets ou groupes d’objets, ou pour trouver la largeur / hauteur de l’écran. Créons un nouveau
rectangle et enregistrez-le en tant que propriété de notre variable PlayState.

 module (?, package.seeall) fonction PlayState () local PlayState = ? un tas de code commenté? function create () -: void PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight)? commenté la logique create ()? end create () end

Ici nous avons créé un nouveau rectangle de (0,0) à (la largeur de l'écran, la hauteur de l'écran), et stocké
dans la variable _background. Je mets le trait de soulignement là-bas afin d'imiter le code d'origine. Tout
des variables privées dans la version ActionScript du jeu commencent par un trait de soulignement.
_background est privé pour chaque instance PlayState, je l'ai donc formaté comme les autres variables.

Notez la syntaxe des points. Si vous vous en souvenez, cela signifie que _background est maintenant une propriété de
PlayState. Depuis que nous avons créé la variable PlayState en dehors de la fonction create (), elle est disponible.
maintenant à toutes les fonctions. Si nous avions créé PlayState dans create () comme ceci:

 module (?, package.seeall) function PlayState () function create () - PlayState est maintenant local à create () local PlayState =  - PlayState peut toujours être utilisé dans create, mais il n'est pas disponible en dehors. PlayState._aNumber = 10 end function otherFunction () - Une erreur sera générée. otherFunction ne sait pas ce qu'est PlayState. print (PlayState._aNumber) end create () otherFunction () end

Nous n'aurions pas pu l'utiliser dans otherFunction (). Depuis que nous avons créé PlayState au début
de PlayState (), toutes les fonctions peuvent l’utiliser.

 module (?, package.seeall) function PlayState () - PlayState est maintenant local chez PlayState () local PlayState =  function create () - PlayState (et ses propriétés) peut être utilisé dans create et ailleurs. PlayState._aNumber = 10 end function otherFunction () PlayState._aNumber = PlayState._aNumber + 4 - Ceci imprimera 14 caractères d'impression (PlayState._aNumber) end create () otherFunction () end

Si vous exécutez le code avec le nouveau rectangle, vous verrez un fond blanc. Nous devons changer sa
remplissez la couleur au vert. Pour ce faire, nous devons convertir le code hexadécimal (ABCC7D) en RVB, qui est ce que
Corona utilise pour remplir les objets d'affichage. Vous pouvez coller ce code dans l’un des sites Web hexadécimaux vers RVB..
Le résultat sera (171, 204, 125). Maintenant, utilisez la méthode d'instance setFillColor (notez les deux points) sur
PlayState._background.

 module (?, package.seeall) fonction PlayState () local PlayState = ? un tas de code commenté? function create () -: void PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight) PlayState._background: setFillColor (171, 204, 125)? commenté la logique create ()? end create () end

Nous avons maintenant le début d'une partie. Faisons encore quelques changements avant de terminer la journée.
Ajoutons une variable à chaque instance de PlayState pour indiquer si le jeu est en cours d'exécution ou non..

 module (?, package.seeall) fonction PlayState () local PlayState = ? un tas de code commenté? function create () -: void PlayState._inGame = true PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight) PlayState._background: setFillColor (171, 204, 125)? commenté la logique create ()? end create () end

Cela deviendra très utile plus tard. Supprimons également la barre d'état en haut de l'iPhone.
Nous voulons que cela ne soit fait qu'une fois au lancement de l'application, ajoutez-le à main.lua..

 local PlayState = require ("PlayState"), fonction Main () -: void display.setStatusBar (display.HiddenStatusBar) PlayState.PlayState () end Main ()

Une autre étape importante lors de la création d’une application Corona consiste à ajouter un fichier de configuration qui indiquera à Corona comment
pour adapter votre application sur d'autres plates-formes. Dans ce tutoriel, nous ne nous intéressons qu'à l'iPhone
taille de l'écran (bien que l'application fonctionne également sur Android). Créez un fichier appelé config.lua et remplissez-le.
avec ça.

 application = contenu = largeur = 320, hauteur = 480, échelle = "boîte aux lettres",

Maintenant, notre application fonctionnera également sur les écrans de la rétine. Remarque: ce fichier fonctionnera avec n’importe quelle application Corona..

Conclusion

Nous avons maintenant un cadre de travail sur lequel commencer. Notre application ne ressemble pas beaucoup, mais nous
ont couvert de nombreuses étapes importantes du transfert d’une langue à une autre. Ensuite
leçon de cette série, nous allons commencer à faire un jeu jouable.