[tuto Lua] Envie De Programmer Sur Nintendo Ds?


benja32
 Share

Messages recommandés

Cours n°1: Introduction à la programmation.

ndslogo.jpg

Bonjour les gueux :P

L'univers de la DS commence a grandir c'est pourquoi

beaucoup de personne vont vouloir contribuer à cette grande communauté. DS Lua vous permet de créer (en codant) vos jeux sans trop de connaissances en la matière c'est pourquoi j'ai décidé de faire un tutorial pour vous permettre de le comprendre très facilement. Je ferais sûrement une série de tutoriaux en fonctions de l'évolution des versions.

J'ai beaucoup de connaissances dans la programmation, cela est donc facile pour moi, mais je vais vous l'expliquer simplement de manière à ce que même les personnes qui n'ont jamais fait de programmation ne soient pas perdus. De plus je vous conseille de connaître les bases de la programmation car je ne vais pas en parler en détails.

Pour commencer vous aurez besoin de quelques logiciels pour pouvoir utiliser DS Lua. Vous aurez bien sûr besoin d'une nintendo DS et d'un kit flash.

Le Lua est un langage interpreté donc il n'a pas besoin d'être compilé mais dans le cas de la DS vous devez le packeter dans un fichier ROM pour que ça marche. Je vous expliquerais ça plus tard.

Logiciel dont vous avez besoin:

-DS Lua Player (dernière version 0.5 au moment où je suis en train d'écrire), trouvable ici.

-Je vous conseil fortement de vous procurer un émulateur. Dualis est le meilleur dans la matière, téléchargez la dernière version ici.

Il supporte le son, le style,le double screen, impressionnant hein ?

– un environnement de développement: Crimson Editor, téléchargez le ici.

Bon nous avons donc tous nos programmes de base pour nous permettre de créer notre première application: "hello world". Une multitude de possibilités s'offrent devant nous, C'est parti !!

Comment lancer votre script.lua avec l'émulateur et la nintendo ds:

Pour lancer votre code lua sans compacter en une ROM utiliser la version cf avec l'émulateur dualis, pour cela allez dans file et cliquez sur load and exécute, une fenêtre apparaît. Sélectionner le dossier release-cf de dslua et lancer DSLua.nds. Quand cela est fait une interface apparaît sur la partie basse de l'écran de l'émulateur, avec les flèches directionnelles sélection cf puis appuyer sur X pour rentrer dedans, ensuite cliquer sur scripts et lancer votre script.lua que vous aurez préalablement mis dans ce dossier. Voilà vous savez maintenant comment utiliser le DSlua version CF qui est le plus utilisée selon vos linker, mais ia c'est vous qui devez savoir lequel est compatible ;)

Maintenant je vais vous montrer comment utiliser la version GBSF. Tout d'abord, placez votre script.lua dans le dossier scripts (dans le dossier du luaplayer GBFS bien sûr) ensuite cliquez sur PACK.bat. Une fois fais, lancez dualis cliquez sur load and execute et lancer DSLUA-PACK.nds qui se trouve dans le dossier bundle (c'est ce fichier qui a été créer quand vous avez lancé PACK.bat. Il contient votre script.lua), nous le compactons dans un .nds car certain linker ne peut lancer seulement les fichiers compacter dans une rom.

L'étape suivante est optionnelle et n’est utile que si vous utilisez le Crimson Editor.

Donc, si vous utilisez Crimson Editor, vous pouvez configurer un macro pour compresser automatiquement votre rom et la lancer en tant que test. Evitez d'avoir d'autre tâche de fond dans windows pendant que vous programmer. Maintenant fait ce qui suit :

1. Ouvrez Crimson Editor

2. Cliquez sur "Tools" puis "Preferences"

3. Selectionnez "User Tools"

4. Dans le menu text , saisissez "DS Lua Run", dans Command, cliquez sur le boutton browser (...) et selectionnez votre fichier PACK.BAT (le répertoire initial est le répertoire où se trouve votre PACK.BAT . Enfin, cliquez sur "Hot Key" et appuyez sur le bouton que vous voulez lui associer. D'habitude j'utilise F5 ou F9. Enlevez (décocher) "Close on Exit" et vérifiez bien que "Save before execute" est coché. Et enfin cliquez sur OK.

Quand vous souhaiterez tester votre jeu, vous pourrai le faire en appuyant sur la touche associé à "hotkey", donc, si vous aviez choisi F9 par exemple, en appuyant sur F9 cela sauvera le fichier et lancera le fichier PACK.BAT.

Voilà maintenant rendez-vous au cour n°2 pour commencer a programmer ;)

Cours n°2: Hello World.

Dans ce cour, nous allons apprendre à créer notre propre programme. Votre premier programme sera un "Hello World", qui sera affichée sur l'écran du haut en jaune. Commençons par créer un nouveau fichier dans lle dossier script appelé "helloworld.lua". Ensuite ouvrez le avec votre éditeur de texte ou de code que vous utilisez. Nous avons besoin de taper le code pour pouvoir mettre le code sur l'écran du haut:

SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )

Nous avons posé une variable SCREEN_TOP en haut du programme cela est plus pratique.

Maintenant que l'écran est en gros "installé/monté" il est temps de taper un peu de texte. Cela peut être réalisé en utilisant une simple fonction appelée PrintXY().Cette fonction vous permettra de faire apparaître du texte sur n'importe quel écran et dans n'importe quel endroit. Vous pouvez le faire en utilisant ce code:

BGBotText:PrintXY( 1, 1, "Hello World!" )BGTopText:PrintXY( 1, 1, "Hello World!" )

La ligne du haut sert à afficher Hello World sur l'écran( nous allons donc l'utiliser) et la deuxième à l'afficher en bas. Mais auparavant pour l'afficher en bas il faut taper les codes d'installation de l'écran, mais pour le bas non pour l haut comme nous l'avons fait précédemment. Vous devrez donc obtenir ceci:

SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )BGTopText:PrintXY( 1, 1, "Hello World!" )

Vous vous demandez sûrement à quoi correspondent les 1 et pourtant je suis sûr que vous en connaissez la provenance et dès que je vais vous le dire vous aller faire un grand AHH! et vous dire que c'est très logique. Les 1 correspondent en fait aux coordonnées du texte ( vous avez vu ça au lycée et même au collège avec les repères des droites, etc).Et bien ici c'est la même chose qu'un repère l'écran de la DS est comme ceci avec un repère à l'envers:

axexy.jpg

J'espère que vous avez compris le fonctionnement :D.

Maintenant lancez le programme même s'il n'est pas fini est bien sur il ne marche pas réellement.Il ramène directement au menu principale sans que vous ayez le temps de voir le texte.Nous avons donc besoin de trouver un moyen pour mettre le programme en pause afin de voir le texte s'afficher.Nous allons donc mettre un systeme qui attendra que vous pressiez un bouton pour revenir au menu principal. Le code est le suivant:

SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )BGTopText:PrintXY( 10, 12, "Hello World!" )DSLua.WaitForAnyKey()

Voici le résultat sur la nintendo ds:

tuto1-1.jpg

Bien! Maintenant lancez le et vous devriez voir Hello World au centre de l'écran du haut. Remarquez bien que j'ai changé les chiffres dans cet exemple pour que le texte soit centré. Ah oui maintenant je suppose que vous voulez rajouter un peu de couleur pour donner un aspect plus vivant à votre texte :D et bah voila le code ya rien de plus simple:

BGTopText:SetColor( 4 )BGTopText:PrintXY( 1, 1, "Votre texte" )

Le nombre dans BGTopText:SetColor() dit à DSLua quelles couleurs il doit utiliser.Je suis généreux je vous donne donc le code des couleurs:

# Couleur0 Noir1 Rouge2 Vert3 Bleu4 Magenta5 Cyan6 Jaune7 Gris clair8 Gros foncé

Les nombres que vous mettrez dans la fonction énoncée précédemment correspondront à la couleur en face de celui-ci (tableau). Je vous rappelle que notre but était de faire apparaître Hello World en jaune, centré sur l'écran du haut de votre DS et qui revient au menu principal quand vous pressez n'importe quel bouton voici donc le code final:

SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )BGTopText:SetColor( 6 )BGTopText:PrintXY( 10, 12, "Hello World!" )DSLua.WaitForAnyKey()

Voila vous avez réalisé votre premier programme sur votre DS !! Félicitation !! Je vais vous maintenant vous montrer comment on fait la même chose, mais avec les deux écrans à la fois.Je vous donne juste le code avec les explications après les -- qui ne sont pas lues par DSLua. Ceci permet au programmeur de mieux se retrouver dans ses codes et au lecteur de mieux comprendre a quoi le code sert. Je suppose qu’étant très forts vous avez déjà compris le fonctionnement de ces fonctions. Place au code !!

Voici le résultat sur la nintendo ds:

tuto1-2.jpg

-- "installer" les deux écrans pour afficher le texteSCREEN_TOP = 1SCREEN_BOTTOM = 0BGTopText = Screen.LoadTextBG()BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )Screen.Initialize( SCREEN_BOTTOM, BGBotText )-- Programmez des variables pour le texte de l'écran du hauttextcolor = 6text = "Hello World!"x = 10y = 12BGTopText:SetColor( textcolor )BGTopText:PrintXY( x, y, text )BGBotText:SetColor( 6 ) -- 6 correspond au jaune (voir tableau)BGBotText:PrintXY( 10, 12, "Hello World!" ) -- 10, 12 devrait centrer le texte.DSLua.WaitForAnyKey() -- attendez que le texte s'affiche puis pressez une touche pour quitter.

Cour n°3: Les conditions.

Les instructions "If" sont des bout de code qui sont executé que si une certaine condition est remplie.

Exemple de condition :

if name == "bob", if a < 4, if answer == "correct"....

Voici comment vous devez écrire une intruction :

SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )language = DSLua.Language()if language == 1 thenBGBotText:PrintXY( 1, 1, "Hello!" )endif language == 2 thenBGBotText:PrintXY( 1, 1, "Bonjour!" )endDSLua.WaitForAnyKey()

On peut traduire les lignes de code ci dessus par :

Afficher "Hello!" si la DS est en anglais, ou "Bonjour!" si elle est en francais. Vous devriez comprendre comment

faire une simple instruction avec "if" maintenant. Rapelez vous, que lorsque vous assimilez 2 variables, ou nombre

il faut utiliser ==. Et quand vous assignez une valeur à une variable il faudra utiliser, =. Ne les mélanger pas!

Mais le == vérifie juste que les deux valeurs sont égal, alors qu'en est-il si l'on veut vérifier qu' une valeur est

plus grande que l'autre ou si deux valeur sont inégale? Voici la liste des opérations de compraison qui peuvent être

utilisé dans des instruction de condition (comme if) :

Operation Exemple Explication

== if a == 1 then Si A est égal à 1 alors lancé le bout de code suivant.~= if a ~= 1 then Si A n'est pas égal à 1 alors lancé le bout de code suivant.< if a < 1 then Si A est plus petit que 1 alors lancé le bout de code suivant.> if a > 1 then Si A est plus grand 1 alors lancé le bout de code suivant.<= if a <= 1 then Si A est plus petit ou égal à 1 alors lancé le bout de code suivant.>= if a >= 1 then Si A est plus grand ou égal à 1 alors lancé le bout de code suivant..

Il y a quelque partie optionel de l'instruction de if. Il y a else, elseif, and, et or.

"Else" executera le bloc de code selon else seulement si l'instruction "if" renvoie comme valeur false [faux] (ce qui signifie que le bloc de code de l'instruction if ne sera pas exécuté.)

"Elseif" est juste une instruction if qui s'executera seulement si l'instruction if qui lui appartiens renvoie false [faux], comme else.

Testons maintenant de multiples conditions, donc toutes les conditions que nous allons utiliser devront renvoyer true [vrai] au bloc de code pour s'executer.

"Or" est utilisé un peu comme "adn", mais si n'importe laquel des conditions utiliser avec "or" renvoie true [vrai], l'instruction if s'executera même si une des autres conditions n'est pas trouvée.

Voici un exemple de toutes ces instructions if:

SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )hour = DSLua.Hour()if hour > 0 and hour < 4 thenBGBotText:PrintXY( 1, 1, "Tu es presque en retard!" )elseif hour > 4 and hour < 12 thenBGBotText:PrintXY( 1, 1, "Bonjour!" )elseif hour > 11 and hour < 16 thenBGBotText:PrintXY( 1, 1, "Bonne après-midi!" )elseBGBotText:PrintXY( 1, 1, "Bonsoir!" )endDSLua.WaitForAnyKey()

Boucles

Les boucles sont des blocs de code qui repète un certain nombre de fois. Il y a deux types de boucles différentes en DSLua : La "boucle for" et "boucle while".

La "boucle for" repète un nombre de fois définit par vous ou une variable.

La "boucle while" est une boucle conditionel.

La boucle, comme son nom l'indique se repète en boucle jusqu'a ce qu'une condition soit touvée.

While ressemble beaucoup à une instruction if. Cette boucle execute un bloc de code si une certaine condition est trouvé. La différence est que cette boucle while repète le bloc de code encore et encore jusqu'a ce qu'une condition soit trouvée. Voici un exemple. Cette "boucle while" attend que l'utilisateur touche l'ecran tactil de la DS avant de continuer le programme :

SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )BGBotText:PrintXY( 1, 1, "toucher l'écran tactil pour quitter!" )x = 1while x == 1 doif Stylus.Down() thenx = 0endend

J'ai fixé x égal à 1 au départ et la boucle while vérifie si x est bien égal à 1 à chaque fois que la boucle se relance. Elle vérifie aussi si le stylet touche l'écran tactil à chaque boucle. Si c'est le cas, il fixe x égal à 0. Si la boucle conditionel trouve que x n'est pas égal à un, il stop la boucle et le programme reprend normalement.

Pour les boucles ayant un compteur intégré à une variable, ils se veront incrémenter (ajouter) 1 à chaque fois que la boucle se relance. On fixe le nombre que l'on veux pour prevoir le départ, et le nombre pour la fin de la boucle que le compteur devra atteindre pour s'arreter. Facultativement, vous pouvez fixer le nombre qui se vera incrementé/désincrementé à votre compteur. (Comme si par exemple vous vouliez créer un compte à rebour "countdown" [10 9 8 7 6 5 4 3 2 1] , utiliser le compte à rebour comme ceci : countdown=10,1,-1 ce qui aura pour effet de diminuer le compte à rebours d'un à chaque fois.)

Voici un exemple concrait :

SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )for x=0,7 doBGBotText:SetColor( x )BGBotText:PrintXY( 1, x+1, x )endDSLua.WaitForAnyKey()

Comme vous pouvez le voir, la variable X est beaucoup utilisée. Au début de la boucle, je fixe x egal à 0. Donc X est maintenant déclaré comme le compte à rebour, auquel cas il se lance jusqu'a 7 et ensuite retour à 0. Dans la boucle, d'abord il place le texte inférieur sur l'écran au code de couleur X. Ensuite, il imprime X à l'écran, aux coordonnées 1,x+1.

Cour n°4: Reconnaissance des touches et de l'écran.

Jusqu'à présent nous avons vu comment affiché des chose à l'écran et les laisser se déplacer aux hasard (le programme prend des décision aux hasards). Mais cela n'est pas vraiment utile lorsque l'on veut réaliser un jeu dans lequel est fait pour une nintendo DS. Vous allez avoir besoin de "user-input" ( = donné d'utilisateur) pour faire un jeu. La DS a les différentes sorte de donnée d'utilisateur suivante: touch screen (le touche écran), buttons (boutons), et microphone (microphone). Vous allez en apprendre un peu plus à propos des deux premier dans ce tutoriel.

Pour les boutons c'est facile. Il y a fonction spécial pour chaque boutons qui, s'il n'est pas pressé (si on appuie pas dessus) nous donne le résultat false (faux) et true (vrai) si le bouton est pressé (un peu confus ? c'est normal). Ces fonctions ne peuvent pas se trouver dans le fichiers readme.txt qui est avec le DSLua, mais je vais le lister ici:

Pads.A()Pads.B()Pads.X()Pads.Y()Pads.L()Pads.R()Pads.Up()Pads.Down()Pads.Left()Pads.Right()Pads.Select()Pads.Start()Pads.AnyKey()

Trés trés facile. Ils commencent tous avec Pads. et ensuite le nom du bouton, suivi de (). Pads.AnyKey() signifie que le résultat est true si une des touches est pressée.

SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )x = 16y = 12while Pads.Start() == false do -- Quitte quand START est appuyéif Pads.Up() theny = y - 1endif Pads.Down() theny = y + 1endif Pads.Left() thenx = x - 1endif Pads.Right() thenx = x + 1endBGTopText:PrintXY( x, y, "0" )for delay=1,5000 doendend

Le touche écran est un peu plus dur à capter, mais reste tout de meme compréhensible. Il y a 3 fonctions:

Stylus.Down() Donne le résultat true si le stylus est entrain de toucher l'écran.Stylus.X() Donne la position de x du stylus s'il touche l'écran.Stylus.Y() Donne la position de y du stylus s'il touche l'écran.

Par exemple, si l'on veut que l'utilisateur touche l'écran pour qu'un jeu commence, comme beaucoup de vrai jeu DS, vous pouvez utiliser le code suivant:

while Stylus.Down() == false doend

Mais pour afficher "Vous pressez un bouton" à l'écran et pour vérifier que l'utilisateur est entrain de taper sur l'écran est en peu difficile . Vous aurez besoin d'utiliser ce code, que vous pourrez comprendre aprés l'avoir regardé plusieurs fois:

if Stylus.X() >= 50 and Stylus.X() <= 70 and Stylus.Y() <= 150 and Stylus.Y() >= 100 thenBGBotText:PrintXY( 1, 1, "Vous pressez le bouton!" )end

Bien sur vous aurez besoin de vérifier continuellement s'ils sont préssés en utilisant une boucle principal (loop). De toute facon, le code d'au dessus vérifie s'ils ont tapé cela :

touchscreenandbuttons1.png

Ma fonction permet de detecter si le stylus est appuyé dans un rectangle de valeur 50 , 100 , 70 ,150. Ca marche comme cela :

if stylusInBox( 50, 100, 70, 150 ) thenBGBotText:PrintXY( 1, 1, "vous avez préssé le bouton!" )end

La premiere coordonnée (50, 100) précise où se situe le coin supérieur gauche de la box (boite), et la seconde (70, 150) précise où se situe le coin inférieur droit de la box. A partir de cela, la fonction nous informe si le stylus est dans la (return true).

Cour n°5: Sons et musiques

La plupart des bons jeux sont dotés de musiques et d'effets sonores, ou au moins l'un des deux. Le DSLua supporte seulement deux formats : Les effets sonores en .RAW et les musiques en .MOD.

Vous pouvez trouver des musiques au format .MOD sur Mod Archive ou en cherchant sous Google. Les effets sonores en .RAW peuvent être converti à partir d'un format .WAV ou .MP3 avec un logiciel adhécuate

(à chercher sous google ;)). J'utilise Smart Audio Converter qui est en téléchargement libre mais il y en a surement de bien meilleur.

Note : Il semblerai que Dualis ne jouerait pas correctement les fichiers .MOD et .RAW. Les fichiers .MOD sont ralentis et les .RAW le sont encore plus.

Tout d'abord, vous apprendrez comment lancer une musique. Ne vous inquiétez pas, c'est très simple. La première chose à faire est de charger le fichier MOD. Si votre fichier MOD s'appel, par exemple "music.mod", vous devez faire ça :

ModSongname = Music.LoadMod( "music.mod" )

Ensuite, pour le lancer, nous utilisons ModSongname:Play(). Pour le stopper, nous utilisons ModSongname:Stop().

Et pour le mettre en pause : ModSongname:Pause(). A la fin de votre programme, ou quand vous en avez finit avec le fichier MOD,

utilisez ModSongname:Free() pour le liberer de la mémoire. Voici un programme de démonstration de toutes ces fonctions.

A lancera la musique. B stoppera la musique. L mettra en pause la musique. Et Start stoppera le programme :

-- Charge la musiqueModMusic = Music.LoadMod( "music.mod" )while Pads.Start() == false doif Pads.A() thenModMusic:Play()endif Pads.B() thenModMusic:Stop()endif Pads.L() thenModMusic:Pause()endendModMusic:Free()

Pour les effets sonores, c'est exactement la même chose, exepté que vous ne pouvez pas l'arreter ou le mettre en pause.

Maintenant que vous savez tout au sujet du lancement des fichiers musique, vous devriez facilement pouvoir savoir lancer des effets sonores en regardant ce code :

-- Charge les effets sonoresSndGun = Sound.LoadRaw( "gun.raw" )SndVoice = Sound.LoadRaw( "voice.raw" )while Pads.Start() == false doif Pads.A() thenSndGun:Play()endif Pads.B() thenSndVoice:Play()endendSndGun:Free()SndVoice:Free()

Voilà c'est ici que s'achève la première raclée de cours :P d'autre viendrons s'ajouter par la suite, n'hésité pas à poser des questions si vous en avez ;)

a++

benja32

Lien vers le commentaire
Partager sur d'autres sites

super tuto tres clair..ça me donne envie de me lancer..

2 questions :

1 facile : quelles sont les coordonnées maximum de l'écran tactile?

Et 1 plus dure : si la DS ne peut lire que des son en RAW et MOD, comment les codeur font pour que des soft genre Moonshell ou DSOrganize puisse lire du MP3?

En gros, je voudrais un "lecteur MP3" sur ma DS, mais aucun des 2 soft ci dessus ne me convient (je dois etre trop difficile..), et je ne trouve aps d'autre soft avec cette fonction (surement que j'ai mal cherché..)..donc, pourquoi pas tenter le coup..

Lien vers le commentaire
Partager sur d'autres sites

super tuto tres clair..ça me donne envie de me lancer..

2 questions :

1 facile : quelles sont les coordonnées maximum de l'écran tactile?

Et 1 plus dure : si la DS ne peut lire que des son en RAW et MOD, comment les codeur font pour que des soft genre Moonshell ou DSOrganize puisse lire du MP3?

En gros, je voudrais un "lecteur MP3" sur ma DS, mais aucun des 2 soft ci dessus ne me convient (je dois etre trop difficile..), et je ne trouve aps d'autre soft avec cette fonction (surement que j'ai mal cherché..)..donc, pourquoi pas tenter le coup..

1) les cordonnées de l'écran tactiles sont les mêmes que l'écran du dessus

axexy.jpg

2) DSLUA ne lis pas les mp3 donc c'est mort.

Lien vers le commentaire
Partager sur d'autres sites

  • 2 months later...

Salut !

Comme vous le voyez je suis nouveau et donc faut m'expliquer exactement ce que je doit faire du début à la fin lol newlaugh !

En fait, je n'ai pas réussi à faire marcher rien qu'au début mon "helloworld" (ça commence bien ! <_< )

Au début, j'ai tout recopié et ça me mettait un message d'erreur ! Donc j'ai fait copier/coller, et là, qu'est-ce qu'il me met? :

ERROR: script result 1

function

`/cf/SCRIPT/helloworld.Lua:4: a

ttempt to index global `BGBotTex

t' (a nil value) stack traceback

: /cf/SCRIPT/helloworld.Lua:4:

in main chuck'

Voilà ^^ ! Si vous pouviez m'aider ça m'arrangerai lol ^^ !!

Au fait, si vous avez besoin de savoir exactement ce que j'ai mis, voilà :

SCREEN_TOP = 1

BGTopText = Screen.LoadTextBG()

Screen.Initialize( SCREEN_TOP, BGTopText )

BGBotText:PrintXY( 1, 1, "Hello World!" )

BGTopText:PrintXY( 1, 1, "Hello World!" )

SCREEN_TOP = 1

BGTopText = Screen.LoadTextBG()

Screen.Initialize( SCREEN_TOP, BGTopText )

BGTopText:PrintXY( 1, 1, "Hello World!" )

SCREEN_TOP = 1

BGTopText = Screen.LoadTextBG()

Screen.Initialize( SCREEN_TOP, BGTopText )

BGTopText:PrintXY( 10, 12, "Hello World!" )

DSLua.WaitForAnyKey()

C'est tout !

Lien vers le commentaire
Partager sur d'autres sites

Bonjour les gueux,

@The DjBestFegor'Z

Je crois connaitre ton probleme, bien que je ne sois moi même qu'un débutant

Premièrement, tu initialise 3 fois le même écran ( celui du haut ) avec :

SCREEN_TOP = 1BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )

(inutile, mais ce n'est pas selon moi la cause de l'erreur)

Deuxièmement, tu apelle du texte sur l'écran inférieur sans avoir initialisé celui ci :

BGBotText:PrintXY( 1, 1, "Hello World!" )

Avant cette ligne, il faudrait, si je ne me trompe pas, un

SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )

De plus, tu apelle du texte à 3 reprises, pourquoi ? ;)

Bonne chance pour la suite :ok:

Maintenant, mon propre problème :P

Voila, je viens de débuter en LUA sur DS, j'ai commencé par un simple script qui affiche la touche sur laquelle on appuie, mais la DS me renvoie une erreur:

Failed to load: 3

'/CF/2.LUA:16: '=' expected near 'Pads' '

(j'utilise DSLUA 0.5, la 0.7 refuse de booter sur mon DS-X )

Voici mon code :

SCREEN_TOP = 1SCREEN_BOTTOM = 0BGTopText = Screen.LoadTextBG()BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )Screen.Initialize( SCREEN_BOTTOM, BGBotText )x = "Vous n'appuyez sur rien"while Pads.Start() == false or Pads.Select() == false doy = xif Pads.A() == true thenWhile Pads.A() == true dox = "Vous appuyez sur A"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endelseif Pads.B() == true thenWhile Pads.B() == true dox = "Vous appuyez sur B"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endelseif Pads.X() == true thenWhile Pads.X() == true dox = "Vous appuyez sur X"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endelseif Pads.Y() == true thenWhile Pads.Y() == true dox = "Vous appuyez sur Y"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endelseif Pads.L() == true thenWhile Pads.L() == true dox = "Vous appuyez sur L"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endelseif Pads.R() == true thenWhile Pads.R() == true dox = "Vous appuyez sur R"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endelseif Pads.Start() == true thenWhile Pads.Start() == true dox = "Vous appuyez sur Start"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endelseif Pads.Select() == true thenWhile Pads.Select() == true dox = "Vous appuyez sur Select"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endelseif Stylus.Down() thenWhile Stylus.Down() == true dox = "Vous touchez l'écran tactile"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endelseif Pads.Down() == true or Pads.Up() == true or Pads.Left() == true or Pads.Right() == true thenWhile Pads.Down()== true  or Pads.Up()== true  or Pads.Left()== true  or Pads.Right() == true dox = "Vous appuyez sur la croix directionnelle"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endelsewhile Pads.A() == false and Pads.B() == false and Pads.X() == false and Pads.Y() == false and Pads.L() == false and Pads.R() == false and Pads.Up() == false and Pads.Down() == false and Pads.Left() == false and Pads.Right() == false and Stylus.Down == false dox = "Vous n'appuyez sur rien"BGTopText:SetColor( 6 )BGTopText:PrintXY( 1, 1, x)endif x ~= y thenBGTopText:FillRectWithChar( 0, 0, 31, 23, " " )endend

Je ne comprend pas l'erreur cette fois ci, et si une bonne ame qui si connait en LUA passe par ici... :P

Merci d'avance et a bientot sur le forum ^ ^

Lien vers le commentaire
Partager sur d'autres sites

@Arantes

Merci beaucoup ! (mais désolé pour ton problème; quand je dis que je suis débutant, c'est que c'est mon 1er script en C++ ^^ !)

Encore un problème ^^ :

-- Voici mon premier Script ^^ !

-- Les Variables d'Écrans

SCREEN_TOP = 1

SCREEN_BOTTOM = 0

BGBotText = Screen.LoadTextBG()

BGTopText = Screen.LoadTextBG()

Screen.Initialize( SCREEN_BOTTOM, BGBotText )

Screen.Initialize( SCREEN_TOP, BGTopText )

-- Les 2 textes indiquants le n° de l'écran

BGBotText:PrintXY( 1, 1, "ECRAN DU BAS" )

BGTopText:PrintXY( 1, 1, "ECRAN DU HAUT" )

If Stylus.X() >= 50 and Stylus.X() <= 70 and Stylus.Y() <= 150 and Stylus.Y() >= 100 then

BGBotText:PrintXY( 1, 1, "Vous pressez le bouton!" )

end

-- Attendre la pression d'une touche

DSLua.WaitForAnyKey()

Là je ne comprend pas du tout le problème ! J'ai cherché mais bon :huh: ... pas trouvé !

Lien vers le commentaire
Partager sur d'autres sites

Re,

Moi aussi c'est mon premier script (PS: ce n'est pas du C++, c'est du LUA ;) ), pas seulement dans ce langage mais en générale ;) ( sauf un tout ch'ti peu de RUBY pour RPG maker )

J'ai trouvé ton problème ( encore ^^), alors en fait, c'est que vu que ta condition pour le stylet est seulement une condition, ben si elle n'est pas remplie dès le début, elle ne sera pas activée du tout^^

Pour résoudre cela, essaye le code suivant :

-- Voici mon premier Script  !-- Les Variables d'ÉcransSCREEN_TOP = 1SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )Screen.Initialize( SCREEN_TOP, BGTopText )-- Les 2 textes indiquants le n° de l'écranBGBotText:PrintXY( 1, 1, "ECRAN DU BAS" )BGTopText:PrintXY( 1, 1, "ECRAN DU HAUT" )while true doif Stylus.X() >= 50 and Stylus.X() <= 70 and Stylus.Y() <= 150 and Stylus.Y() >= 100 thenBGBotText:PrintXY( 10, 10, "Vous pressez le bouton!" )-- J'ai modifié les coordonnées pour ne pas que ce message interfère avec "ECRAN DU BAS" -- Pour effacez le "Vous pressez le bouton!" si celui ci n'est plus presséelseBGBotText:PrintXY( 10, 10, "									 " )end-- Attendre la pression d'une toucheif DSLua.WaitForAnyKey() thenbreakendend

Modifié par Arantes
Lien vers le commentaire
Partager sur d'autres sites

Merci beaucoup Arantes!, mais le problème, c'est que ça ne marche toujours pas ^^ ! il me dit :

Failed to Load: 3`/cf/SCRIPTS/Mon projet.Lua:1:unexpected symbol near ` ''

{PS.:

ce n'est pas du C++, c'est du LUA
Oui je sais ^^, j'ai confondu avec un autre logiciel que j'utilisais juste avant ^^ dsl ! Sinon c'est bien sûr mon 1er script en LUA, pareil sauf en RUBY pour RPG Maker, et un peu en DarkBasic ^^.} Modifié par The DjBestFegor'Z
Lien vers le commentaire
Partager sur d'autres sites

J'ai tout recommencé:

Voici mon ancien:

--Voici mon premier script  !--Les Variables d'ÉcransSCREEN_TOP = 1SCREEN_BOTTOM = 0BGBotText = Screen.LoadTextBG()BGTopText = Screen.LoadTextBG()Screen.Initialize( SCREEN_BOTTOM, BGBotText )Screen.Initialize( SCREEN_TOP, BGTopText )--Les 2 textes indiquants le n° de l'écranBGBotText:PrintXY( 1, 1, "ECRAN DU BAS" )BGTopText:PrintXY( 1, 1, "ECRAN DU HAUT" )while true doif Stylus.X() >= 50 and Stylus.X() <= 70 and Stylus.Y() <= 150 and Stylus.Y() >= 100 thenBGBotText:PrintXY( 10, 10, "Vous pressez le bouton!" )--J'ai modifié les coordonnées pour ne pas que ce message interfère avec "ECRAN DU BAS" --Pour effacez le "Vous pressez le bouton!" si celui ci n'est plus presséelseBGBotText:PrintXY( 10, 10, " " )end--Attendre la pression d'une toucheif DSLua.WaitForAnyKey() thenbreakendend

Voici le nouveau:

-- Voici mon premier script  !-- Variables d'ÉcransSCREEN_BOTTOM   = 0SCREEN_TOP	  = 1BGTopText = Screen.LoadTextBG()BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )Screen.Initialize( SCREEN_BOTTOM, BGBotText )-- Boucle principale ~while true do  -- "Vous appuyez sur l'écran !!"  if Stylus.Down() then	BGBotText:PrintXY( 2, 10, "Vous appuyez sur l'écran !!" )	BGTopText:PrintXY( 2, 10, Stylus.X())	BGBotText:SetColor( 5 )  else	BGBotText:PrintXY( 2, 10, "						   " )  endend-- Fin de Boucle principale

Modifié par The DjBestFegor'Z
Lien vers le commentaire
Partager sur d'autres sites

Ouais mais maintenant tu n'a aucun moyen de quitter ton code.

Je te suggère un 'tite modification :

-- Voici mon premier script  !-- Variables d'ÉcransSCREEN_BOTTOM   = 0SCREEN_TOP	  = 1BGTopText = Screen.LoadTextBG()BGBotText = Screen.LoadTextBG()Screen.Initialize( SCREEN_TOP, BGTopText )Screen.Initialize( SCREEN_BOTTOM, BGBotText )-- Boucle principale ~while true do  -- "Vous appuyez sur l'écran !!"  if Stylus.Down() then	BGBotText:PrintXY( 2, 10, "Vous appuyez sur l'écran !!" )	BGTopText:PrintXY( 2, 10, Stylus.X())	BGBotText:SetColor( 5 )  else	BGBotText:PrintXY( 2, 10, "						   " )  endif Pads.Start() thenbreakendend-- Fin de Boucle principale

Lien vers le commentaire
Partager sur d'autres sites

  • 6 months later...

bonjour a tous

J'aimerai savoir comment on fait pour que le texte change quand on appuis sur A.

En fait j'aimerais faire comme un livre sur ds style docteur kawachima sur le teste de lecture pour ce qui connaisent.

pouvez vous m'aider merci

Lien vers le commentaire
Partager sur d'autres sites

  • 3 months later...

Bonjour.

Il n'existe pas des scripts tout prêt a collé les uns a la suite des autres pour créer son propre logiciel ou jeux?

Par exemple, un script qui ajoute du son (il n'y aurais qu'a ajouter le nom du son a jouer au moment voulu)

Un autre script pour afficher une image sur l'écran voulu.

Un autre pour ajouter un effet pour par exemple, faire glisser une image au contact du stylet.

Un autre pour créer un monde en 3D, il ne faudrait qu'ajouter les noms des textures et les coordonnées des objets tel des arbres ou des maisons ( j'imagine donc qu'il faudrait également ajouter des scripts de modélisation des arbres et des maisons lol )

Le plus simple serait surement une sorte de RPG maker mais pour nintendo ds lol.

J'ai trouver plusieurs tuto pour expliquer la programmation sur nintendo ds, mais... aucuns d'eux n'était clairement expliquer pour que les novices qui ont envie d'apprendre ne reste pas bloqué a un moment ou a un autre...

Les explications pas à pas ne sont donc pas encore (d'après moi) assez compréhensibles et ne font qu'embrouiller nos pauvres petits cerveaux lol.

En même temps, je comprend bien que les gars qui écrivent ses tuto doivent bien avoir du mal a se rabaissé a notre niveau et que certaines choses qu'ils tentent de nous expliqué leurs paraissent évidentes.

(Comme quand je dit a ma mère de faire un clique droit sur le bureau et qu'elle ne comprend pas que le bureau est l'endroit ou il y a les icônes et la photo de sa petite fille sur l'écran ^^).

Merci!

Lien vers le commentaire
Partager sur d'autres sites

  • 1 year later...

Bonjour,

Quand je démarres DSLua.nds j'ai un "dossier" sram et si je fais SELECT, A et SELECT j'ai un autre "dossier" cf.

Ces deux "dossiers" ne sont pas présent sur ma carte MicroSD et ils sont vides.

J'ai une DSi avec l'EZ-Flash Vi.

Merci de vos réponses.

Aurel2108.

PS : Ce tuto est génial !!!

EDIT : J'ai trouvé, j'ai téléchargé DSLua 0.7 et ça marche.

Par contre : le code couleur 6 ne correspond plus au jaune mais au bleu

Modifié par aurel2108
Lien vers le commentaire
Partager sur d'autres sites

  • 3 months later...

Argh ! AVG a trouvé un virus !

:blink:

Analyse :

[i]File Info[/i]Report generated: 18.8.2009 at 3.48.59 (GMT 1)Filename: dualis-20.3.zipFile size: 254 KBMD5 Hash: 70338ab6cf2a3fa1cd6294b670b042edSHA1 Hash: FE3B6299BC5E6FC243C59C4326C9A10C1E85E080Self-Extract Archive: Nothing foundBinder Detector: Nothing foundDetection rate: [color="red"]5[/color] on 22[i]Detections[/i]a-squared - [color="red"]CC.Agent!IK[/color]Avira AntiVir - [color="red"]CC/Agent.QH[/color]Avast - -AVG - [color="red"]I-Worm/Agent.C[/color]BitDefender - -ClamAV - -Comodo - [color="red"]Heur.Packed.Unknown[/color]Dr.Web - -Ewido - -F-PROT6 - -Ikarus T3 - [color="red"]CC.Agent[/color]Kaspersky - -McAfee - -NOD32 v3 - -Norman - -Panda - -QuickHeal - -Solo Antivirus - -Sophos - -TrendMicro - -VBA32 - -VirusBuster - -[i]Scan report generated by[url="http://novirusthanks.org"]NoVirusThanks.org[/url][/i]

:encolere12: Pourquoi moi ?PS : Il n'est détecté que par 5 AntiVirus, je pense plutôt à une erreur de detection :^p

Modifié par th3m4ri0
Lien vers le commentaire
Partager sur d'autres sites

  • 2 months later...

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
 Share