GTAOnline.net

Multi Theft Auto (mta) => Scripting MTA [Lua Center] => Discussion démarrée par: ~CG~FatalTerror le 01 Juin 2011, 14:12:36

Titre: [Résolu]Image pour toute les résolutions
Posté par: ~CG~FatalTerror le 01 Juin 2011, 14:12:36
Bonjour,
Me revoilà  :-\

Voila mon problème:

Je fessait un userpanel entièrement fait en images. Et je me suis rendu compte grâce a des joueurs que il avait des positions très étranges.
Y a des scripters qui m'ont dit qu'il fallait faire un calcule pour l'afficher correctement avec toute les résolutions.
Je suis allait chercher sur le wiki et j'ai trouvé ceci: guiGetScreenSize () ( http://wiki.multitheftauto.com/wiki/GuiGetScreenSize (http://wiki.multitheftauto.com/wiki/GuiGetScreenSize) )

Ils me disent de faire une soustraction, moi j'ai fait le gui comme sa.
Citer
guiCreateStaticImage(1204,642,154,119,"images/fr.png",false)

J'ai fait ceci:

Left position value is 1204, 1024-1204= -180
Top position value is 642, 768-642 = 126
Right position values is 154, 1024-154 = 870
Bottom position value is 119, 768-119 = 649

(Je l'ai fait avec la calculatrice)

Citer

function imageShow ()
local sWidth,sHeight = guiGetScreenSize() -- The variables
guiCreateStaticImage(sWidth--180,sHeight-126,sWidth-870,sHeight-649,"images/fr.png",false)
end
 
addEventHandler ( "onClientResourceStart", getRootElement(), imageShow)


Et cela ne marche pas :/
Soit mon ordi est tellement vieux qu'il a fait une erreur de calcule ou je sais pas.
Merci de bien vouloir m'aider (encore une fois  ::) )

Titre: Re : Image pour toute les résolutions
Posté par: Ssk le 01 Juin 2011, 14:44:04
Héhé, j'avais eu le même problème sur le serveur MTA que je code actuellement, bah en gros je t'explique.

Tu fais ton image pour du 1920*1080, ensuite tu prend la taille de l'écran du client, et tu fais ça


local x, y = getScreenSize( )
local rateX, rateY = x/1920, y/1080

guiCreateStaticImage(1204,642,154*rateX,119*rateY,"images/fr.png",false)


edit: sWidth--180 c'est pas bon vu que tu as deux -, et en lua deux - c'est pour commenter une ligne ^^

ensuite pour faire en sorte que les positions soit bonne il faut que tu débrouille :D, ça part du même principe ^^
Titre: Re : Image pour toute les résolutions
Posté par: Citizen le 01 Juin 2011, 18:06:00
Salut,
Alors il faut savoir qu'en relatif ( de 0 à 1 ) ça marche pour toutes les résolutions donc si on place une image à 50% ( = milieu ) d'un écran avec une résolution de 800*600, l'image sera aussi située au milieu sur un écran avec une résolution de 1366*768. Logique non ? :happy
Donc le but c'est d'afficher l'image en relatif et non pas en relatif.
D'après ce que j'ai compris, tu es en 1024*768.
/?\ Mais 1204, ça fait combien en pourcentage /?\
Et bien c'est tout simple, il suffit de diviser le nombre par la résolution du jeu.
Donc si en 1024*768, il suffit de faire: 1204/1024=1.17 (  ??? Il y a un problème là, ça ne devrai pas dépassé 1 sinon il sera placé en-dehors de l’écran ! )
Il me faut la résolution de MTA pour laquelle l'image est bien placée.
Voici le code final:
Code: (lua) [Sélectionner]
function imageShow ()
----------- METRE EN RELATIF -------------
local px, py = AbsoluteToRelative( 1204, 642 ) -- mettre la position en relatif
local sx, sy = AbsoluteToRelative( 154, 119 ) -- mettre la size en relatif
----------------- AFFICHER ---------------
guiCreateStaticImage(PX,PY,SX,SY,"images/fr.png",true)
end
addEventHandler ( "onClientResourceStart", getRootElement(), imageShow)

function AbsoluteToRelative( x, y )
local X = x/1024
local Y = y/768
return X,Y
end
Par contre tu dois remplacer 1024 et 768 par la résolution de ton MTA.
Après ça c'est tout bon  :king
Titre: Re : Image pour toute les résolutions
Posté par: MK le 03 Juin 2011, 22:28:06
J'ai le même probléme que fatalterror et
j'ai utilisé ta méthode:

Code: ("Lua") [Sélectionner]
function imageShow ()
----------- METRE EN RELATIF -------------
local px, py = AbsoluteToRelative( 1200, 0 ) -- mettre la position en relatif
local sx, sy = AbsoluteToRelative( 450, 100 ) -- mettre la size en relatif
----------------- AFFICHER ---------------
guiCreateStaticImage(px,py,sw,sy,"image.png",true)
end
addEventHandler ( "onClientResourceStart", getRootElement(), imageShow)

function AbsoluteToRelative(x,y)
local x, y = getScreenSize( )
local X = x/1680
local Y = y/1050
return X,Y
end

j'ai modifier pour essayer de le faire marcher, mais aucune image n'était visible

merci de m'aider
Titre: Re : Image pour toute les résolutions
Posté par: Citizen le 03 Juin 2011, 23:22:32
Salut MK,
Es-tu sûr que c'est ma méthode ? Regarde bien :happy
Cette ligne n'a pas lieu d'être:
Code: (lua) [Sélectionner]
local x, y = getScreenSize( )car là tu essayes de mettre en relatif ta résolution d'écran  :lmao
donc cette fonction revoie toujours 1, 1 si tu es en 1680*1050
Il te suffit juste de supprimer cette ligne et ça marchera  :closedeyes

Cordialement,
Citizen
Titre: Re : Image pour toute les résolutions
Posté par: MK le 04 Juin 2011, 19:25:11
même rien ne se passe
Titre: Re : Image pour toute les résolutions
Posté par: Citizen le 04 Juin 2011, 20:42:50
Ok donne moi ton guiCreateStaticImage et la résolution de ton MTA pour laquelle l'image est bien placé et de la bonne taille.
Je te ferais le code et tu pourras voir comment j'ai fait.
Titre: Re : Image pour toute les résolutions
Posté par: MK le 04 Juin 2011, 21:27:56
function imageShow ()
----------- METRE EN RELATIF -------------
local px, py = AbsoluteToRelative( 1200, 0 ) -- mettre la position en relatif
local sx, sy = AbsoluteToRelative( 450, 100 ) -- mettre la size en relatif
----------------- AFFICHER ---------------
guiCreateStaticImage(px,py,sw,sy,"image.png",true)
end
addEventHandler ( "onClientResourceStart", getRootElement(), imageShow)

function AbsoluteToRelative(x,y)
local X = x/1680
local Y = y/1050
return X,Y
end

résolution: 1680x1050
taille image: 450x100
position: 1200 - 0 ? (normalement elle devrait être en haut à gauche)
Titre: Re : Image pour toute les résolutions
Posté par: Citizen le 05 Juin 2011, 11:42:40
Ok d'accord j'ai fait une erreur: tu aurais pu me dire que qu'il y avait une erreur, sw n'est pas définie ( nil value ) remplace sw par sx faute de frappe désolé  :lmfao
Pour les erreurs côté client, les erreurs ne se trouve pas dans la console ( comme pour les erreurs du côté serveur )
Tu as 2 solutions:
1) taper /debugscript3 ( tu verras toutes les erreurs clients et serveur )
2) Aller dans C:\....\MTA San Andreas\MTA\clientscript.log pour les erreurs côté client seulement.

l'image devrait apparaître ( mais 1200, 0 c'est en haut à droite et pas à gauche  :happy)
Titre: Re : Image pour toute les résolutions
Posté par: MK le 05 Juin 2011, 11:44:08
je suis complétement soul moi, en effet j'avais pas vu la fautes, pourtant je suis repassé trois fois dessus.
merci!

Titre: Re : Image pour toute les résolutions
Posté par: Citizen le 05 Juin 2011, 12:51:14
Pas de souci et désolé pour cette faute de frappe ( qui a fait perdre pas mal de temps  :dry )
Titre: Re : Image pour toute les résolutions
Posté par: ~CG~FatalTerror le 18 Juin 2011, 23:04:13
Probleme de maikill résolu, le mien aussi :D

Merci a vous !