• 16 Mai 2024, 05:53:53


Auteur Sujet: [Résolu]Problême d'affichage GUI  (Lu 3702 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne skyfoam

  • *
  • Nouveau
  • Messages: 10
    • Voir le profil
[Résolu]Problême d'affichage GUI
« le: 21 Juin 2013, 18:22:25 »
bonjour tous le monde,
voici mon problême:
Losque je fait "start gui" pour démarrer mon petit script il m'affiche un message d'erreur, à la ligne 48. Je ne comprend absolument pas, j'ai revérifier des dizaines de fois cette ligne mais rien à faire...
voici mon code:outputChatBox("v1.0")
function createLoginWindow()
--création de la window de tchat
local X = 0.375
local Y = 0.375
local Width = 0.25
local Height = 0.25
tchatTo = guiCreateWindow(X, Y, Width, Height, "Please Log In", true)
--Coordonée pour le label
X = 0.0825
Y = 0.5
Width = 0.25
Height = 0.25
--création du label
guiCreateLabel(X, Y, Width, Height, "Message:", true, tchatTo)
--coordonnées pour la box
X = 0.415
Y = 0.5
Width = 0.5
Height = 0.15
--création de la box
Message = guiCreateEdit(X, Y, Width, Height, "", true, tchatTo)
guiEditSetMaxLength(Message, 50)
--création du boutton
X = 0.415
Y = 0.7
Width = 0.25
Height = 0.2
btnLogin = guiCreateButton(X, Y, Width, Height, "Submit", true, tchatTo)
--clic sur le boutton
addEventHandler("onClientGUIClick", btnLogin, clientSubmitLogin, false)
-- création de la "hitbox" du boutton
-- (these are passed automatically by onClientGUIClick)
function clientSubmitLogin(button,state)
-- si clique gauche:
if button == "left" and state == "up" then
-- enlevé le focus de la box
guiSetInputEnabled(false)
-- fermer la fenêtre
guiSetVisible(tchatTo, false)
-- caché la souris
showCursor(false)
local message = guiGetText(Message)
outputChatBox(message)
end
end
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()))
function ()
-- create the log in window and its components
createLoginWindow()
 
-- output a brief welcome message to the player
                outputChatBox("Welcome to My MTA:SA Server, please log in.")
 
-- if the GUI was successfully created, then show the GUI to the player
        if (tachatTo ~= nil) then
guiSetVisible(tachatTo, true)
else
-- if the GUI hasnt been properly created, tell the player
outputChatBox("An unexpected error has occurred and the log in GUI has not been created.")
        end
 
-- enable the players cursor (so they can select and click on the components)
        showCursor(true)
-- set the input focus onto the GUI, allowing players (for example) to press 'T' without the chatbox opening
        guiSetInputEnabled(true)
end
Merci d'avance pour vos réponses ;-)
ps: je suis débutant en scripting mta ( je crois que cela ce remarque...).
« Modifié: 21 Juin 2013, 22:34:17 par skyfoam »

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : Problême d'affichage GUI
« Réponse #1 le: 21 Juin 2013, 21:18:02 »
Bonsoir skyfoam,

L'erreur est relativement simple.
Remplace ceci:
Code: (lua) [Sélectionner]
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()))
function ()
...
end

par ceci:
Code: (lua) [Sélectionner]
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()),
function ()
...
end
)

Enfait, une notion assez poussé en LUA est utilisée ici, il utilise une fonction anonyme (comme tu peux le voir, la fonction qui est déclarée ne porte pas de nom).
Si je rappel les arguments dont à besoin la fonction addEventHandler, il a besoin d'une fonction en 3ème argument.

Donc si on regarde ma version corrigée, on a bien 3 arguments
Code: (lua) [Sélectionner]
"onClientResourceStart",
getResourceRootElement(getThisResource()),
function () ... end

Le code équivalent sans utiliser de fonctions anonymes:
Code: (lua) [Sélectionner]
function myAwesomeFunction()
...
end
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), myAwesomeFunction)

Au niveau optimisation, la version avec la fonction anonyme est légèrement plus optimisé, mais la différence est infime. Donc pour des questions de lisibilité, la 2ème version est conseillée.

J'espère que tu auras compris ET l'erreur, ET le principe des fonctions anonymes.

A bientôt.

Cordialement,
Citizen
The rEvolution is coming ...

Hors ligne skyfoam

  • *
  • Nouveau
  • Messages: 10
    • Voir le profil
Re : Problême d'affichage GUI
« Réponse #2 le: 21 Juin 2013, 22:33:21 »
Voilà, ça fonctionne :biggrin: Celà m'apprendra à recopier un bout de code... Sinon merci de ta rapidité. J'aurais encore et celà très surement, beaucoup de question à posé (et oui tu va souffrir  :medieval_sword2:)! Mais, comme je dit, chaque chose en son temps.
Encore merci ;-)

Hors ligne skyfoam

  • *
  • Nouveau
  • Messages: 10
    • Voir le profil
Re : [Résolu]Problême d'affichage GUI
« Réponse #3 le: 21 Juin 2013, 23:03:10 »
Je poste à peine le message que j'ai un nouveau problême! Mais la je pense que c'est que je suis fatiqué... il me marque ce message: "ERROR: gui\script.lua:6: attempt to call global 'guiCreateWindiw' <anil value>.
Cela veut surement dire que j'ai un mauvais chiffre pour définir la taille de la fenêtre or c'est juste, c'est en pourcentage...
Merci

Hors ligne Aegoss

  • I'm gonna kick dat' ass !
  • *
  • • « a3goss - иsɢ Lєadєʀ » •
  • Messages: 4787
    • Voir le profil
Re : Re : [Résolu]Problême d'affichage GUI
« Réponse #4 le: 22 Juin 2013, 09:23:39 »
Je poste à peine le message que j'ai un nouveau problême! Mais la je pense que c'est que je suis fatiqué... il me marque ce message: "ERROR: gui\script.lua:6: attempt to call global 'guiCreateWindiw' <anil value>.
Cela veut surement dire que j'ai un mauvais chiffre pour définir la taille de la fenêtre or c'est juste, c'est en pourcentage...
Merci

Lorsque tu auras bien dormi, réessaye, il se peut que tu le règles comme si de rien était.
HP Envy 15-K222NF - Argent
15,6'' Full HD - Intel Core i5-4200U - HDD 1 To - RAM 8 Go - NVIDIA GeForce GTX 850M 4 Go - LG E2251 - Logitech G105 - R.A.T 7 Contagion - Siberia V2 ''Orange''




Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : [Résolu]Problême d'affichage GUI
« Réponse #5 le: 22 Juin 2013, 14:09:30 »
Aegoss a raison  :laugh:
Néanmoins si tu ne trouve pas, je te donne un indice qui pourra te servir si jamais tu revois cette erreur:
attempt to call global 'xxXxxx' <a nil value>.
Ça veut dire qu'il essaye d’accéder à xxXxxx mais qu'il n'existe pas. Tu peux avoir cette erreur pour des variables ou des fonctions (comme c'est le cas ici)
The rEvolution is coming ...

Hors ligne skyfoam

  • *
  • Nouveau
  • Messages: 10
    • Voir le profil
Re : [Résolu]Problême d'affichage GUI
« Réponse #6 le: 22 Juin 2013, 19:44:18 »
Yep,
voila, je viens de changer tous ça. Donc maintenant il n'y a plus de problême. Mais (et oui ^^), un nouveau apparait : je tape la commande message sur le jeu et là, rien ne se passe. Donc je vais voir ma console et elle m'affiche stack overflow à la ligne 8.
J'ai été m'informer sur des forums pour savoir ce que ça signifiait et je suis tombé sur une personne qui explique que c'est soit un dépassement de la mémoire vive aloué au programme soit une boucle infinie ou un truc du genre.
Pour mon cas, je penche pour le deuxième étant donné la taille de mon script...Ainsi, j'ai revérifier si il y avait une réinsertion de fonctions infini ou des boucles infines, or il n'y en a pas... je ne comprend pas.
Voici mon nouveau code un peu améliorer:
outputChatBox("v1.1")
function guiCreateWindow()
--création de la window de tchat
local X = 0.375
local Y = 0.375
local Width = 0.25
local Height = 0.20
outputChatBox("yop")
tchatTo = guiCreateWindow(X, Y, Width, Height, "Please Log In", true)
--Coordonée pour le label
X = 0.0825
Y = 0.5
Width = 0.25
Height = 0.25
--création du label
guiCreateLabel(X, Y, Width, Height, "Message:", true, tchatTo)
--coordonnées pour la box
X = 0.415
Y = 0.5
Width = 0.5
Height = 0.15
--création de la box
Message = guiCreateEdit(X, Y, Width, Height, "", true, tchatTo)
guiEditSetMaxLength(Message, 50)
--création du boutton
X = 0.415
Y = 0.7
Width = 0.25
Height = 0.2
btnLogin = guiCreateButton(X, Y, Width, Height, "Submit", true, tchatTo)
--clic sur le boutton
addEventHandler("onClientGUIClick", btnLogin, clientSubmitLogin, false)
guiSetVisible(tchatTo, false)
end
function clientSubmitLogin(button,state)
-- si clique gauche:
if button == "left" and state == "up" then
-- enlevé le focus de la box
guiSetInputEnabled(false)
-- fermer la fenêtre
guiSetVisible(tchatTo, false)
-- caché la souris
showCursor(false)
local message = guiGetText(Message)
outputChatBox(message)
end
end
function anonyme()
outputChatBox("yep")
guiCreateWindow()
if (tchatTo ~= nil) then
guiSetVisible(tchatTo, true)
else
-- si problême
outputChatBox("An unexpected error has occurred and the log in GUI has not been created.")
        end
-- afficher la souris
        showCursor(true)
-- définir le focus
        guiSetInputEnabled(true)
end
addCommandHandler("message", anonyme)

Merci!

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : [Résolu]Problême d'affichage GUI
« Réponse #7 le: 24 Juin 2013, 20:29:28 »
soit un dépassement de la mémoire vive aloué au programme soit une boucle infinie... soit un appel récursif sans condition de fin de "ta" fonction guiCreateWindow().

Depuis quand à t'on le droit de créer des function qui porte le même nom que de vraies fonctions ?
Jamais, enfin on peut mais ducoups ça remplace la véritable fonction par la tienne.

Un moyen simple de corriger le problème est de nommer ta fonction autrement.

Fait plus attention à ce que tu fais et va pas trop vite.

Cordialement,
Citizen
The rEvolution is coming ...

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [Résolu]Problême d'affichage GUI
« Réponse #8 le: 24 Juin 2013, 20:37:41 »
Et bim, stack overflow.

Il faut savoir que quand tu as un stack (mémoire locale) overflow c'est à 90% à cause d'un appel récursif infini sur une fonction.
Par contre un heap (mémoire globale) overflow c'est un dépassement de la mémoire allouée.



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Citizen

  • Scripteur LUA confirmé
  • *
  • Messages: 235
    • Voir le profil
    • Byston Evolution
Re : [Résolu]Problême d'affichage GUI
« Réponse #9 le: 24 Juin 2013, 20:55:34 »
Haha merci pour l'info Ssk je me coucherais moins bête ce soir, j'avoue que c'est le genre d'info que j'ai jamais eu à cherché  :laugh:
The rEvolution is coming ...

Hors ligne skyfoam

  • *
  • Nouveau
  • Messages: 10
    • Voir le profil
Re : [Résolu]Problême d'affichage GUI
« Réponse #10 le: 24 Juin 2013, 23:59:14 »
Oh oui, quel imbécile je fait :huh:
En tout cas merci pour cette info! En plus, il est totalement opérationnel maintenant!  :biggrin: