So because I really like playing with these Engines, I decided to make a little and easy one, too.
This GameEngine is really easy and of cause this GameEngine is not as good as the GameEngines you may know.
But I made this just for fun.
At first I wanted to use C/C++ for my GameEngine but then I noticed that there are many different (really good) GameEngines. So I also took a look at AutoIt-Engines and I could not find any real Engine.
Thats why I decided to make my Engine with AutoIt and I also finished a peace of the code.
I want to share it as Opensource, you can use it for commercial and non commercial projects. Feel free to change some things and to add/delete some old things.
If you are using this Engine, please give me a place in credits or something similiar.
The File you can download includes an AutoIt-File called "Install_GameEngine.au3", just start this file and then you can use the GameEngine with Syntax-Highlighting and Calltips. There is nothing more to do. You can start after executing Install-Script my examples.
In the File there are also 2 Examples, I was too lazy to write some better looking examples. But the examples should explain some basic things.
Edit:
A german version and some more explanations will follow if you are interested.
Eine deutsche Version+Tutorial wäre echt nett, ich schaus mir jetzt aber erstmal an!
Durch die 2 Beispiele und durch die Calltips gibt es eigentlich nicht mehr so viel zu erklären. Das meiste macht man Intuitiv so. Aber ich glaube ich werde noch ein Beispiel mit genauer Erklärung machen.
wäre vielleicht noch ratsam, sich die variablendeklarationen in funktionen nochmals genauer an zu schauen.
lässt du beispielsweise eine for schleife in einer funktion mit dem index $i laufen, und deklarierst diese nicht als lokal, könnte dies bei nutzung der funktion im hauptprogramm zu problemen führen, falls hier ebenfalls $i als indexvariable genutzt wird.
davon abgesehen könnte man vielleicht noch als kleinen schönheitsfehler ansehen, das einige funktionen doch deutlich kürzer gefasst werden könnten.
dies bezieht sich insbesondere auf die funktionen welche ausschließlig boolean werte als rückgabe haben.
nehmen wir zb deine erste funktion:
Quote:
Code:
Func _ShadowEngine_GetColisionWindow($id)
If $_ShadowEngine_Objects[$id][0] + $_ShadowEngine_Objects[$id][2] + 1 >= $_ShadowEngine_W Or $_ShadowEngine_Objects[$id][1] + $_ShadowEngine_Objects[$id][3] + 1 >= $_ShadowEngine_H Or $_ShadowEngine_Objects[$id][0] <= 1 Or $_ShadowEngine_Objects[$id][1] <= 1 Then
Return 1
Else
Return 0
EndIf
EndFunc
die könnte man natürlich auch einfach so schreiben:
Code:
Func _ShadowEngine_GetColisionWindow($id)
If $_ShadowEngine_Objects[$id][0] + $_ShadowEngine_Objects[$id][2] + 1 >= $_ShadowEngine_W Or $_ShadowEngine_Objects[$id][1] + $_ShadowEngine_Objects[$id][3] + 1 >= $_ShadowEngine_H Or $_ShadowEngine_Objects[$id][0] <= 1 Or $_ShadowEngine_Objects[$id][1] <= 1 Then Return 1
Return 0
EndFunc
das gleiche mit der 2ten funktion:
Quote:
Code:
Func _ShadowEngine_IsMouseInWindow($hGUI)
$pos = MouseGetPos()
$win_pos = WinGetPos($hGUI)
If $pos[0] < $win_pos[0] + $_ShadowEngine_X Or $pos[1] < $win_pos[1] + $_ShadowEngine_Y Then
Return 0
ElseIf $pos[0] > $win_pos[0] + $_ShadowEngine_X + $_ShadowEngine_W Or $pos[1] > $win_pos[1] + $_ShadowEngine_Y + $_ShadowEngine_H Then
Return 0
Else
Return 1
EndIf
EndFunc
welche auch so beschrieben werden könnte:
Code:
Func _ShadowEngine_IsMouseInWindow($hGUI)
Local $pos = MouseGetPos(), $win_pos = WinGetPos($hGUI)
If ($pos[0] < $win_pos[0] + $_ShadowEngine_X Or $pos[1] < $win_pos[1] + $_ShadowEngine_Y) Or ($pos[0] > $win_pos[0] + $_ShadowEngine_X + $_ShadowEngine_W Or $pos[1] > $win_pos[1] + $_ShadowEngine_Y + $_ShadowEngine_H) Then Return 0
Return 1
EndFunc
hierbei handelt es sich allerdings nur um kleinere schönheitsfehler, welche zu minmal größeren ladezeiten des interpreters führen würden.
die variablendeklaration innerhalb der funktionen stellt hierbei ein wesentlich wichtigeres ziel dar, welches betrachtet werden sollte =)
wäre vielleicht noch ratsam, sich die variablendeklarationen in funktionen nochmals genauer an zu schauen.
lässt du beispielsweise eine for schleife in einer funktion mit dem index $i laufen, und deklarierst diese nicht als lokal, könnte dies bei nutzung der funktion im hauptprogramm zu problemen führen, falls hier ebenfalls $i als indexvariable genutzt wird.
davon abgesehen könnte man vielleicht noch als kleinen schönheitsfehler ansehen, das einige funktionen doch deutlich kürzer gefasst werden könnten.
dies bezieht sich insbesondere auf die funktionen welche ausschließlig boolean werte als rückgabe haben.
nehmen wir zb deine erste funktion:
die könnte man natürlich auch einfach so schreiben:
Code:
Func _ShadowEngine_GetColisionWindow($id)
If $_ShadowEngine_Objects[$id][0] + $_ShadowEngine_Objects[$id][2] + 1 >= $_ShadowEngine_W Or $_ShadowEngine_Objects[$id][1] + $_ShadowEngine_Objects[$id][3] + 1 >= $_ShadowEngine_H Or $_ShadowEngine_Objects[$id][0] <= 1 Or $_ShadowEngine_Objects[$id][1] <= 1 Then Return 1
Return 0
EndFunc
das gleiche mit der 2ten funktion:
welche auch so beschrieben werden könnte:
Code:
Func _ShadowEngine_IsMouseInWindow($hGUI)
Local $pos = MouseGetPos(), $win_pos = WinGetPos($hGUI)
If ($pos[0] < $win_pos[0] + $_ShadowEngine_X Or $pos[1] < $win_pos[1] + $_ShadowEngine_Y) Or ($pos[0] > $win_pos[0] + $_ShadowEngine_X + $_ShadowEngine_W Or $pos[1] > $win_pos[1] + $_ShadowEngine_Y + $_ShadowEngine_H) Then Return 0
Return 1
EndFunc
hierbei handelt es sich allerdings nur um kleinere schönheitsfehler, welche zu minmal größeren ladezeiten des interpreters führen würden.
die variablendeklaration innerhalb der funktionen stellt hierbei ein wesentlich wichtigeres ziel dar, welches betrachtet werden sollte =)
@Variablendeklaration
AutoIt sieht Variablen, die in einer Funktion deklariert wurden als Global an?
Wenn das stimmt, dann hast du mir eben was bei gebracht, denn ich war bisher der festen Überzeugung, dass diese Variablen auch nur lokal verwendbar sind.
@Schönheitsfehler
Ganz ehrlich?
Wen interessierts?
Solange es nicht Geschwindigkeitsvorteile bringt, kann das ruhig so bleiben, trotzdem danke für die Anregung.
For <variable> = <start> To <stop> [Step <stepval>]
statements
...
Next
Parameter
variable Die Zählervariable.
start Der Startwert der Zählervariable.
stop Der Endwert der Zählervariable.
stepval [optional] Der Wert (auch Kommazahlen und negative Zahlen sind möglich), um den die Zählervariable bei jedem Durchlauf verändert wird. Standard ist 1.
Bemerkungen
Die Variable wird automatisch als lokale Variable deklariert, auch wenn MustDeclareVars aktiviert ist.
For...Next-Schleifen können verschachtelt werden. Die Schleife wird verlassen, wenn der Wert von variable die stop-Grenze überschreitet. Wenn stepVal oder stop eine Variable ist, wird dessen Wert nur beim ersten Durchlauf der Schleife gelesen.
Eine For-Schleife wird nicht ausgeführt, wenn
start > stop und step > 0 oder
start < stop und step negativ ist.
Mich stört vielmehr das ewiglange Präfix der Funktionen
For $i = 1 to 5
MsgBox("","1",$i)
_func()
Next
Func _func()
For $i = 1 to 5
MsgBox("","2",$i)
Next
EndFunc
Außerdem steht in der Help folgendes.
Mich stört vielmehr das ewiglange Präfix der Funktionen
Calltips ftw.
Nein Spaß bei Seite, mich störts auch etwas.
Nur eine nette Alternative ist mir auf die Schnelle nicht eingefallen, ich hätte aber nichts gegen Vorschläge.
es geht nicht darum das funktionen variablen als global definieren, sondern das vorherige deklarierte variablen einfach überschrieben werden...
das dies bei for schleifen so funktioniert habe ich bisher noch nicht gewusst kann aber sein.
schaue ich mir deine 2te funktion die ich schon erwähnte nochmals an
Code:
Func _ShadowEngine_IsMouseInWindow($hGUI)
$pos = MouseGetPos()
$win_pos = WinGetPos($hGUI)
If $pos[0] < $win_pos[0] + $_ShadowEngine_X Or $pos[1] < $win_pos[1] + $_ShadowEngine_Y Then
Return 0
ElseIf $pos[0] > $win_pos[0] + $_ShadowEngine_X + $_ShadowEngine_W Or $pos[1] > $win_pos[1] + $_ShadowEngine_Y + $_ShadowEngine_H Then
Return 0
Else
Return 1
EndIf
EndFunc ;==>_ShadowEng
sieht man aber das nicht nur bei schleifen nicht auf deklarationen geachtet hast...
wenn mir jetzt jemand wieder mit zitaten aus der hilfe kommt, dass auch mousegetpos etc immer automatisch lokal deklarieren, würde ich einfach sagen, dass es sich hierbei nur um konstruktive kritik handeln sollte.
wenn man ein kleines programm schreibt, bei dem man darauf achtet das variablen in funktionen definitiv nicht global vorkommen, kann man das gerne so gestalten, will man allerdings ein allgemeingültiges framework anbieten, so ist dies mit eine der haupt fehlerursachen, für alle nutzer...
habe mich nicht genauer mit dem code beschäftigt, nur sind das semantische fehler welche mir ohne zu scrollen direkt ins auge gefallen sind.
Calltips ftw.
Nein Spaß bei Seite, mich störts auch etwas.
Nur eine nette Alternative ist mir auf die Schnelle nicht eingefallen, ich hätte aber nichts gegen Vorschläge.
Dann wäre eine kurze Erklärung wie man die Calltips in Scite einfügt vielleicht ganz gut. Dass Problem mit den Präfixen der Global nutzbaren Variablen würde aber bestehen.
Ja keine Ahnung, als alternativ Präfix wäre vieles denkbar.
_SGE_
_SE_
_S992E_
_GE_
_Sh992GE_
Naja, könntest ja SE_ anstatt ShadowEngine nehmen.
Oderr, falls das in Autoit existiert Namespaces.
Was mich mal persönlich etwas irritiert (sehe ich etwas öfters): Diese Unterstriche am Anfang des Funktionsnamen.
Ist das so eine Autoit-Konvention? :O
Ansonsten natürlich super Arbeit, ist ja ne Art Marktlücke Fehlt nur noch eine 3D Engine für Autoit
es geht nicht darum das funktionen variablen als global definieren, sondern das vorherige deklarierte variablen einfach überschrieben werden...
das dies bei for schleifen so funktioniert habe ich bisher noch nicht gewusst kann aber sein.
schaue ich mir deine 2te funktion die ich schon erwähnte nochmals an
Code:
Func _ShadowEngine_IsMouseInWindow($hGUI)
$pos = MouseGetPos()
$win_pos = WinGetPos($hGUI)
If $pos[0] < $win_pos[0] + $_ShadowEngine_X Or $pos[1] < $win_pos[1] + $_ShadowEngine_Y Then
Return 0
ElseIf $pos[0] > $win_pos[0] + $_ShadowEngine_X + $_ShadowEngine_W Or $pos[1] > $win_pos[1] + $_ShadowEngine_Y + $_ShadowEngine_H Then
Return 0
Else
Return 1
EndIf
EndFunc ;==>_ShadowEng
sieht man aber das nicht nur bei schleifen nicht auf deklarationen geachtet hast...
wenn mir jetzt jemand wieder mit zitaten aus der hilfe kommt, dass auch mousegetpos etc immer automatisch lokal deklarieren, würde ich einfach sagen, dass es sich hierbei nur um konstruktive kritik handeln sollte.
wenn man ein kleines programm schreibt, bei dem man darauf achtet das variablen in funktionen definitiv nicht global vorkommen, kann man das gerne so gestalten, will man allerdings ein allgemeingültiges framework anbieten, so ist dies mit eine der haupt fehlerursachen, für alle nutzer...
habe mich nicht genauer mit dem code beschäftigt, nur sind das semantische fehler welche mir ohne zu scrollen direkt ins auge gefallen sind.
Oh ja, Dankeschön, ich habe das Deklarieren in AutoIt noch nie wirklich benutzt, kann sein, dass ich es ab und zu einmal vergessen habe.
Ich schaus mir eben noch einmal an.
Quote:
Originally Posted by | Moep |
Dann wäre eine kurze Erklärung wie man die Calltips in Scite einfügt vielleicht ganz gut. Dass Problem mit den Präfixen der Global nutzbaren Variablen würde aber bestehen.
Ja keine Ahnung, als alternativ Präfix wäre vieles denkbar.
_SGE_
_SE_
_S992E_
_GE_
_Sh992GE_
Naja, könntest ja SE_ anstatt ShadowEngine nehmen.
Oderr, falls das in Autoit existiert Namespaces.
Was mich mal persönlich etwas irritiert (sehe ich etwas öfters): Diese Unterstriche am Anfang des Funktionsnamen.
Ist das so eine Autoit-Konvention? :O
Ansonsten natürlich super Arbeit, ist ja ne Art Marktlücke Fehlt nur noch eine 3D Engine für Autoit
Namespace gibts leider soweit ich weiß in AutoIt nicht.
Diese Unterstriche am Anfang der AutoIt-Funktionen haben sich so eingebürgert für UDFs also benutzerdefinierte Funktionen.
Ich denke das liegt vor allem daran, dass es keine Namespaces gibt.
Ich werd mir die Engine mal ansehen, finde ich eine nette Idee.
Aber man kann sicher einige Funktionen mit Windowsinternen Funktionen austauschen, wie zum Beispiel MouseInClient.
Mit deiner Erlaubnis würde ich die Engine etwas überarbeiten.
[Release]Easy Launcher + Easy Injector In 1! [Release] 09/09/2010 - Soldier Front Hacks, Bots, Cheats & Exploits - 64 Replies Hello Elitepvpers,
I'm back with a new project!
I was bored so i made a USF EasyLauncher + EasyInjector! (ONLY FOR USF! Not for PSF!)
U only have to press 3 buttons to start sf with a hack in it! Easy isn't it?
U can use it without hack to!
Instruction:
1)Open EasyLaunch.exe
2)Login (It's on ijji's site so trusted!)