How to "frame" paar Tipps n Tricks

wertzû

Welt-Boss
Mitglied seit
12.01.2008
Beiträge
2.803
Reaktionspunkte
20
Kommentare
76
Wie erstelle ich ein Frame?

http://www.wowwiki.com/API_CreateFrame

Code:
 local test = CreateFrame("Frame", "test", UIParent)

dabei gilt

Code:
("Frame", "Name", Parent)

eigentlich gibt es noch mehr Arten von Frames, jedoch geh ich nur auf "Frame" ein.
Parent bestimmt wann ein Frame sichtbar ist und wenn kein Anchor gesetzt ist fungiert das Parent als Anchor

Position des Frames

http://www.wowwiki.c...Region_SetPoint


Code:
test:SetPoint("CENTER",0,0)

dabei gilt

Code:
("Anchor1",AnchorFrame,,Anchor2,X,Y)

Code:
"CENTER","BOTTOM","BOTTOMLEFT","BOTTOMRIGHT","RIGHT","LEFT","TOP","TOPRIGHT","TOPLEFT"
sind die Anchors

Will man ein Frame jedoch um ein anderes herum "schlängeln" dann kann man dies benutzen
Code:
 test:SetPoint("TOPLEFT",ANCHOR,-2, 2)
test:SetPoint("BOTTOMRIGHT",ANCHOR, 2 -2)

Hintergrund, Vordergrund?

SetFrameStrata(). Damit bestimmt man ob im Hintergrund ist oder im Vordergrund
Nun in die Klammer kommt ein Begriff z.B. "BACKGROUND","LOW" oder "HIGH" gibt natürlich noch mehr

sortiert nach level, parent geringstes, Tooltip höchstes

Code:
"PARENT","BACKGROUND","LOW","MEDIUM","HIGH","DIALOG","FULLSCREEN","FULLSCREEN_DIALOG","TOOLTIP",

http://www.wowwiki.c..._SetFrameStrata

Code:
test:SetFrameStrata("BACKGROUND")
SetFrameLevel(x). SetFrameLevel bewegt sich auf der Ebene von FrameStrata, es gibt die Zahlen 1-10 (0 nicht empfehlenswert)

http://www.wowwiki.c...e_SetFrameLevel
Code:
test:SetFrameStrata(1)

Höhe, Breite?

Aber, wie hoch und lang sollte das Frame sein?
Mit :SetHeight(x) und :SetWidth(x) könnt ihr es bestimmen
x steht dafür für eine beliebige zahl (welche positiv ist)

Kombiniert gibt es auch das: test:SetSize(Width,Height)

http://www.wowwiki.c...egion_SetHeight
http://www.wowwiki.c...Region_SetWidth




Frame Textur zuweisen

danke chiril bin doof

Code:
local f = CreateFrame("Frame", nil, UIParent)

local t = f:CreateTexture(nil,"BACKGROUND")
 f:SetPoint("CENTER", UIParent, 0, 0)
 f:SetWidth(1950)
 f:SetHeight(1210)
 f:SetFrameStrata("BACKGROUND")
 f:SetFrameLevel(0)
 t:SetTexture("Interface\\texture.tga")
 t:SetAllPoints(f)
 f.texture = t
f:Show()

Farbe?

http://www.wowwiki.c..._SetVertexColor
Auch einfärben ist kein Problem (geht nur bei einer Textur), jedoch gibt es nur eins zu beachten, RGB(A) das ist die Farbreihenfolge, R(ot)G(rün)B(lau)(A(lpha)) (1 die höchste zahl 0 die kleinste)

Beispiel:
Code:
test:SetVertexColor(.1,.1,.1,1)

Kommen wir nun zu den interessanteren sachen.



Frame klickbar machen

Code:
test:SetEnableMouse(true) – true or false

Tue das wenn ich darauf klicke

http://www.wowwiki.c...Frame_SetScript

Code:
test:SetScript("OnMouseDown", function()
dummy --wie der name sagt nur ein fake, könnt hier einsetzen was ihr wollt, solange es geht
end)

Frame Mouseover machen

http://www.wowwiki.c...rame_HookScript

Code:
test:HookScript("OnEnter", function(self) self:SetAlpha(1) end)
test:HookScript("OnLeave", function(self) self:SetAlpha(0) end)

Frame bewegbar machen

Code:
test:SetMoveable(true)

 test:RegisterForDrag("LeftButton", "RightButton")

 test:SetScript("OnDragStart", function(self) self:StartMoving() end)

 test:SetScript("OnDragStop", function(self) self:StopMovingOrSizing() end)

Frames Updaten

Code:
local test = CreateFrame("Frame")
test:SetScript("OnUpdate", test.OnUpdate)
function test:OnUpdate()
test:ClearAllPoints()
end

mit diesem Code wird jede 0.1 Sekunde (millisekunde) geupdated, dies kann voralles sehr nützlich sein wenn es um verschieben von Blizzframes geht (manchmal muss man es updaten lassen weil sie sich sonst verschieben)

Frame jede Sekunde updaten lassen
Code is aus dem WoWforum, da ich selten update und wenn dan nur jede 0.1 sekunde, kann ich nicht sagen was passiert wenn ich dort eine 2 einsetze zum beispiel, falls ihr es wisst pm an mich bitte

Code:
local lastUpdate = 0
local test = CreateFrame("Frame")
test:SetScript("OnUpdate", test.OnUpdate)

function test:OnUpdate(elapsed)
lastUpdate = lastUpdate + elapsed

 if lastUpdate > 1 then
 lastUpdate = 0
 test:ClearAllPoints
 end

end

Wenn das passiert dann mach dies (Events)

http://www.wowwiki.com/Events_(API)

Code:
local test = CreateFrame("Frame")
test:RegisterEvent("PLAYER_ENTERING_WORLD") -- Event wird registriert
function test:OnEvent(event, ...) -- function für event == "blahblahblah" wird erstellt
if event == "PLAYER_ENTERING_WORLD" then -- überprüfung
print("Hello World!") -- Hi Welt!
end
 
Zuletzt bearbeitet von einem Moderator:
*gleich mal Link speichert* So ist es einfacher mit Frames neu zu arbeiten als mühselig alles zusammen suchen ;-)

Gibt zwar noch einige Fragen... z.B. Hast du oben einige Angaben gemacht

[font="arial, verdana, tahoma, sans-serif"]Als allererstes mal wie erstelle ich ein Frame? Ganz einfach

local test = CreateFrame("Frame", "test", UIParent)

dabei gilt folgendes

("Frame", "Name", Parent)


Was ist z.B. Parent? Ein "Neuling" weiss das nicht. Muss da immer "Frame" stehen?

Dann bei der Position:

[font="arial, verdana, tahoma, sans-serif"]Nun kommen wir zu der Position des Frames

test:SetPoint("CENTER",0,0)

dabei gilt wieder

("Anchor1",AnchorFrame,,Anchor2,X,Y
[/font]

[font="Verdana, arial, sans-serif"]
[/font]
[font="Verdana, arial, sans-serif"]Du schreibst oben "test:SetPoint("CENTER",0,0) Die Erklärung darunter hat aber mehr "Punkte". Sprich das Beispiel stimmt nicht mit der Erklärung der Parameter 1:1 überein. Ein Neuling verwirrt das meiner Meinung und übernimmt dann einfach genau deine Beispiele, weiss aber nicht genau ob man da noch mehr machen kann.[/font]
[font="Verdana, arial, sans-serif"] [/font]
[font="Verdana, arial, sans-serif"]Sprich ich finde deinen Guide nützlich, allerdings ist er noch nicht ganz Idiotensicher(tut mir leid für die Wortwahl, soll nicht angreifend gemeint sein), da Erklärungen von Beispielen abweichen bzw. den ein oder andere Begriff für Neulinge nicht klar ist, was das ist. Guides schreiben ist nicht ganz einfach, man muss immer Bedenken dass man alles, was im Guide steht erklären muss und nicht einfach "Da kommt Parent" hin und gut ist. Sondern "Was ist Parent" fehlt z.B. noch.[/font]
[font="Verdana, arial, sans-serif"] [/font]
[font="Verdana, arial, sans-serif"]Gruss[/font]
[font="Verdana, arial, sans-serif"]Kneubi[/font]
[font="Verdana, arial, sans-serif"] [/font]
[font="Verdana, arial, sans-serif"]PS: Als Informatiker schreibe ich genügend "Guides für Neulinge" und ich weiss wie mühsam es ist alles zu erklären, trotzdem sollte man es machen ;-)[/font]
[/font]
 
Zuletzt bearbeitet von einem Moderator:
Also es als "Anfänger Tutorial" zu bezeichnen finde ich gewagt, jemand der sich bisher gar nicht oder kaum mit LUA befasst hat, wird davon so gegen 0 verstehen^^ Dafür müssten erstmal einige Sachen erklärt werden (wie kneubi auch schon sagte, sowas a la was bedeutet "parent" etc). Für Leute die sich schon etwas umgeschaut haben in ihren Addons und sie vllt sogar teilweise angepasst haben oder auch schon was eigenes gemacht haben, ist er aber mir Sicherheit hilfreich.
 
ok, werde ich noch verbessern, ist eigentlich n tutorial für leute die vor kurzem mit lua angefangen haben oder es mal versuchen wollen
 
Wollt ihr wie bei KgPanels eine Textur unten haben? Kein Problem

Code:
test:SetTexture(Pfad der Textur)
Das wage ich mal zu bezweifeln
wink.gif
Da das frame ja noch ein frame ist (oh wunder) muss man für das frame erst noch eine Textur erstellen, der man dann die Texturgrafik zuweisen kann. (f ist der Name des frames und t der Name der Textur)


local f = CreateFrame("Frame", nil, UIParent)

local t = f:CreateTexture(nil,"BACKGROUND")
f:SetPoint("CENTER", UIParent, 0, 0)
f:SetWidth(1950)
f:SetHeight(1210)
f:SetFrameStrata("BACKGROUND")
f:SetFrameLevel(0)
t:SetTexture("Interface\\texture.tga")
t:SetAllPoints(f)
f.texture = t
f:Show()

So zum Beispiel
wink.gif


Sind aber noch mehr solcher Dinge drin... zum Beispiel ist SetParent() nicht nur da um ein Frame erscheinen zu lassen wenn das Parent es tut
wink.gif

Es wäre generell sinnvoll die einzelnen Funktionen genauer zu erklären (am besten mit Link zu wowwiki.com oder wowprgramming.com). Zum Beispiel schreibst du über CreateFrame():

[font="arial, verdana, tahoma, sans-serif"]statt "Frame" kann dort auch "Button" oder andere Sachen stehen[/font]
[font="arial, verdana, tahoma, sans-serif"]"SecureActionButtonTemplate" braucht man nicht wirklich, kann man eigentlich weglassen[/font]


Das heißt ich kann da Frame oder Button hinschreiben und es ist ganz egal?
wink.gif
Und was ein inheritsFrame ist weiß natürlich auch jeder
wink.gif


Bei
[font="arial, verdana, tahoma, sans-serif"]
Will man ein Frame jedoch um ein anderes herum "schlängeln" dann kann man dies benutzen
[/font]

[font="arial, verdana, tahoma, sans-serif"]fände ich es sehr wichtig, das AnchorFrame zu erwähnen.[/font]
[font="arial, verdana, tahoma, sans-serif"] [/font]
[font="arial, verdana, tahoma, sans-serif"]Ich finde insgesamt solltest du deinen Guide übersichtlicher gliedern, sowie die einzelnen Funktionen genauer erklären. Ein Anfänger wird glaub ich leider wenig damit anfangen können
sad.gif
[/font]
[font="arial, verdana, tahoma, sans-serif"] [/font]
[font="arial, verdana, tahoma, sans-serif"]Achja, der Guide sollte dann auch lieber im "Nützliche Guides"-Sticky verlinkt werden (wenn er da denn dann reinpasst
tongue.gif
) http://www.buffed.de/forum/index.php/topic/153081-nutzliche-guides/
[/font]
 
Zuletzt bearbeitet von einem Moderator:
ah wusst ich ned das mit Textur, und ja das mit "frame" hab mich bisschen von Kneubi ablenken lassen. Puh war auch spät als ich das gemacht habe, habs bisschen geupdatet, bessere erklärung kommt noch
 
Die Links funktionieren garnicht, nur der erste.

E:
So ich hab mal den Guide ausprobiert und bin (wie immer
smile.gif
) verwirrt. Ich kriege laut BugSack keine Fehler dennoch erscheint nichts.
Und was mir noch so aufgefallen ist bei "Frame klick
bar machen" steht: "SeEnableMouse(true)- true or false" Muss es nicht "Set" heißen?

Was helfen würde ist wie das "Frame" am Ende aussehen sollte.
 
Zuletzt bearbeitet von einem Moderator:
ohja Set sollte dort stehn -.-

wenn du mir deinen Frame code schicken könntest könnt ich dir sagen was falsch ist (ist ja kein guide mehr ;P, zu wenig zeit um alles genau zu beschriften)
 
Wie "mischt" du denn dir denn die Farben und kriegst die Zahlen dafür raus. Ich arbeite mit Gimp komme aber nicht damit klar kommen immer andere Farben raus >.>
 
Wie "mischt" du denn dir denn die Farben und kriegst die Zahlen dafür raus. Ich arbeite mit Gimp komme aber nicht damit klar kommen immer andere Farben raus >.>

Dein problem könnte darin liegen, dass die Farben in Gimp nach RGB von 0-255 skalieren. In WoW arbeitest du allerdings mit Werten von 0-1 dementsprechend musst du deine Werte aus GIMP durch 255 teilen um die selben Farben zu bekommen.
Ich hoffe das hilft dir weiter.
 
Zurück