Münzen mit höheren Werten sollten schwere abzuschießen sein als die mit kleineren Werten. Momentan sind alle gleich schwer.
Beiträge von UEZ
-
-
Nettes Spiel.

Ich würde noch ein Fadenkreuz benutzen, entweder GUISetCursor(3, 1, $hBackGui) oder ein externes.
-
@Alina ich verstehe auch deine Frage nicht.

-
Die Beispiele habe ich nicht aktualisiert.

Nicht nur, dass $ghGDIPDll nun $__g_hGDIPDll ist, Load_BMP_From_Mem ist auch integriert -> _GDIPlus_BitmapCreateFromMemory().
-
-
Gratulation an Tweaky.

Mein Resümee: die Zufall Tipps sind schlechter, aber nicht deutlich. Entweder haben die menschlichen Tipper keine Ahnung oder die Algorithmen waren gut.

Ich selbst tippe i.d.R. nur "aus dem Bauch" heraus.
Nach den Sommerferien geht's in die nächste Runde....
-
Sehr schön, besonders die Blitze um die Buchstaben.

Welcome back.

-
Heißt das also das ich dein altes Tool nutzen kann um die Dateien zu komprimieren und die neuen Funktionen mit ASM Code zum dekomprimieren? Also einfach die alten automatisch generierten Funktionen durch die neuen ersetzen?
Denn es ist ja wohl immer besser die performantesten Funktionen zu nutzen..Edit: es hat sich aber doch relativ viel geändert wenn jetzt eine andere, wesentlich bessere da schnellere, kompressions Methode verwendet wird..
Das Tool ist zum Komprimieren von Dateien gedacht, sondern Daten in dein Skript zu integrieren und um Platz zu sparen, können die Daten komprimiert werden. Wie oben erwähnt, kannst du, wenn du die Komprimierung haben willst und es sich lohnt, d.h. nach der Komprimierung der Code nicht größer wird, zwischen zwei verschiedene Methoden wählen. LZMAT kann unter Umständen zwar besser komprimieren, aber der Dekomprimierungscode kann die Ersparnisse wieder zunichte machen und dein Skript wird größer. Einfach ausprobieren.
-
Es ist zwar schon etwas her, dass Cape-City hier bemerkt hat, dass du inzwischen eine neuere Version deines (echt klasse!) tools hast, in der nicht nur optische änderungen gemacht wurden?
Ich habe jetzt in zwei deiner neuen UDFs gesehen, dass du ASM Code zum dekomprimieren benutzt. Sind diese Funktionen denn performanter als die alten verwendeten? Wenn ja, könntest du dich dann erbarmen uns auch daran teilhaben zu lassen?
ASM ist ja eigentlich das schnellste zu dem man Autoit bewegen kann, oder?Es gibt zwei Komprimierungs-/Dekomprimierungsfunktionen:
- Windows interne LZNT Funktion -> langsam, aber benötigt keinen zusätzlichen Code
- LZMAT nach AutoIt portiert von Ward -> sehr schnell und bessere Komprimierung als LZNT, aber benötigt zusätzlichen Code zum Dekomprimieren (hier als ASM Code)
Wie gesagt, primär hat sich nicht viel geändert.
Assembler ist der schnellste Code, wenn man richtig in Assembler programmiert.
-
deaktiviere mal die Drawfunktion der Erde und lass nur die Wolken anzeigen -> aus diesem Effekt kann man bestimmt nochwas machen.
Ich habe die jetzt die Textur ersetzt durch eine Earth Map ersetzt.
Resultat mit dem alten Code.
-
@eukalyptus: danke für den Tipp. Ich werde schauen, ob man den Effekt auch so darstellen kann.
deaktiviere mal die Drawfunktion der Erde und lass nur die Wolken anzeigen -> aus diesem Effekt kann man bestimmt nochwas machen.
Sieht ja echt klasse aus.
Mal sehen, wie das Ganze aussieht, wenn man anstelle der Wolken die Erde als transparentes Bild nimmt.
Btw, lange nichts mehr von dir gehört.
Und die Enterprise ist auch nicht schlecht, allerdings ruckelt sie etwas beim Vorbeiflug.
Klasse wäre es natürlich, wenn sie in der Animation dann auf Warp-Geschwindigkeit gehen würde.Das Ruckeln liegt wohl an der GDI+ Funktion. Mal sehen, ob man das auch anders machen kann. Bezüglich der Warp-Geschwindigkeit - da kann mal auch was machen.

Ich möchte ja nichts schlecht reden aber von der Scriptsprache wurde hier nicht sehr viel verwendet. Das sind fast ausschließlich WinAPI- und GdiPlus-Funktionen.
Der Code sollte in C nicht groß anders ausschauen (bis auf die Erstellung der GUI). Das ist ja der einzige Punkt der hier von AutoIt wirklich verwendet wird.Nun ja, aber nichtsdestotrotz ist die Animation mit AutoIt geschrieben, d.h. für mich, dass AutoIt nicht nur automatisieren kann, sondern viel mehr.
Btw, mit FreeBasic ist die FPS genau so lahm. Ergo, es liegt an GDI+...@water: danke für dein Feedback
-
Erstmal: wieder mal eine tolle GDI+-Animation von Dir! Erde, Wolken, Mond sieht toll aus und läuft bei mir mit ca. 17 FPS.

Aber astronomisch nicht ganz korrekt. Zum einen besitzt der Mond eine Eigenrotation (man sieht von der Erde aus immer den gleichen Teil des Mondes) und zum anderen dreht er sich anders herum um die Erde (in die Richtung, wie sich die Erde um sich selbst dreht). Gut vom Abstand (Erde <-> Mond) wollen wir mal absehen, das lässt sich in den Größen nicht auf dem Monitor darstellen.
Danke für dein Feedback. Den Mond noch mit einer Rotation zu animieren, würde wohl zur einer Slideshow führen, zumindest auf meiner Kiste, daher ohne die Animation. Die Richtung ist ganz einfach zu ändern -> $z -= 0.5 in der Do / Until Schleife!
Die Animation sollte auch eher zur "Unterhaltung" dienen und nicht eine physikalisch / mathematisch korrekte Animation simulieren. Dafür fehlen die schnellen Grafikfunktionen und meine Mathe / Physik Kenntnisse.
-
@autoiter Danke für dein Feedback.

Und weil's so schön war, v1.6 hochgeladen.
-
Kleines Update auf v1.5 -> Cloud Layer hinzugefügt.
Läuft ca. mit 9~10 FPS bei $iStep = 3. GDI+ ist so lahhhhhmmmmmm..........

-
Well done
, nur flimmert, wenn ich mich durch's Lab. bewege. -
Sieht hübsch aus - erinnert mich an mein Screensaver...

Nur solltest du, wenn du ein GDI+ Objekt in einer Schleife erstellst, es wieder freigeben, ansonsten gibt's ein Memory Leak!
Schaue dir Zeile 92 und 145 mal näher an.
-
AutoIt ist eine simple Programmiersprache, die relativ leicht zu erlernen ist und quasi die komplette Windows API benutzen kann. Ferner kann man in AutoIt zusätzlich noch Inline ASM betreiben oder selbst geschriebene DLLs einbinden, sodass die Grenzen fast grenzenlos sind.
Die Grenzen sind somit i.d.R. das Wissen des Programmierers.
-
Die FPS im Screenshot beziehen sich auf $iStep = 1.

Was ist die Realität?...
-
Mal wieder was in GDI+: Echtzeit Projektion und Rotation einer Earth Map (600x300) auf eine Kugel.
Earth4_600x300.jpg ==> Rotating Earth.jpg
Leider ist die Animation nicht besonders performant, aber sieht dafür hübsch aus.

Inspiriert durch Eukalyptus' Black Hole Code. U

Source Code ist nicht vollständig!
AutoIt
Alles anzeigen;coded by UEZ build 2017-02-25 #pragma compile(Icon, "c:\Program Files (x86)\AutoIt3\Icons\au3.ico") #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe /rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <WindowsConstants.au3> _GDIPlus_Startup() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit Global Const $iW = 800, $iH = 500, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ Rotating Earth coded by UEZ 2017" Global Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi AutoItSetOption("GUIOnEventMode", 1) GDIPlus_RotatingEarth() AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func GDIPlus_RotatingEarth() $bExit = False $hGUI = GUICreate($sTitle, $iW, $iH) ;, 0, 0, $WS_POPUP) GUISetState(@SW_SHOW, $hGUI) ;~ GUISetCursor(16, 1) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hBrush_Clr = _GDIPlus_BrushCreateSolid(0xFF000000), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xFFF0F0F0), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 60, 16), _ $hImage_Earth = _GDIPlus_BitmapCreateFromMemory(_Earth()), _ $hImage_Galaxy = _GDIPlus_BitmapCreateFromMemory(_Galaxy()), _ $hMatrix = _GDIPlus_MatrixCreate(), $hPath = _GDIPlus_PathCreate() Local $aDim = _GDIPlus_ImageGetDimension($hImage_Earth) Local Const $hGfx = _GDIPlus_ImageGetGraphicsContext($hImage_Earth) _GDIPlus_GraphicsDrawStringEx($hGfx, "Coded by UEZ 2017 ;-)", $hFont_FPS, _GDIPlus_RectFCreate(0, $aDim[1] / 2 - 4, 120, 12), $hFormat_FPS, $hBrush_FPS) _GDIPlus_ImageDispose($hGfx) Local Const $hTexture_Earth = _GDIPlus_TextureCreate($hImage_Earth) DllCall($__g_hGDIPDll, "int", "GdipTranslateTextureTransform", "ptr", $hTexture_Earth, "float", -200, "float", 0, "long", 0) Local $iDiameter = $aDim[0] < $aDim[1] ? $aDim[0] : $aDim[1], _ $iDiameter2 = $iDiameter / 2, _ $fDX = ($iW - $iDiameter) / 2, $fDY = ($iH - $iDiameter) / 2 _GDIPlus_PathAddEllipse($hPath, $fDX - 1, $fDY - 1, $iDiameter + 2, $iDiameter + 2) Local Const $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath) _GDIPlus_PathBrushSetCenterColor($hBrush, 0x04000008) _GDIPlus_PathBrushSetCenterPoint($hBrush, $fDX + $iDiameter2 + 1, $fDY + $iDiameter2 + 1) _GDIPlus_PathBrushSetSurroundColor($hBrush, 0xF0000000) _GDIPlus_PathBrushSetGammaCorrection($hBrush, 1) _GDIPlus_PathBrushSetFocusScales($hBrush, 0.5, 0.5) $iFPS = 0 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") AdlibRegister("CalcFPS", 1000) Local $fScale, $fTmp, $iStep = 2 ;the higher $iStep is the faster the animation & lower the quality. Do ;~ DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, _ ;~ "float", $iW, "float", $iH) ;erase canvas background ;~ _WinAPI_BitBlt($hDC_backbuffer, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $BLACKNESS) _GDIPlus_GraphicsDrawImageRect($hCanvas, $hImage_Galaxy, 0, 0, $iW, $iH) DllCall($__g_hGDIPDll, "int", "GdipTranslateTextureTransform", "ptr", $hTexture_Earth, "float", 0.75, "float", 0, "long", 0) For $i = 1 To $iDiameter2 Step $iStep $fScale = 1 + $i / $iDiameter2 _GDIPlus_MatrixSetElements($hMatrix, 1, 0, 0, 1, 0, 0) _GDIPlus_MatrixTranslate($hMatrix, $fDX + $iDiameter2, $fDY + $iDiameter2) _GDIPlus_MatrixScale($hMatrix, $fScale, $fScale) _GDIPlus_MatrixTranslate($hMatrix, -$iDiameter2, -$iDiameter2) _GDIPlus_GraphicsSetTransform($hCanvas, $hMatrix) DllCall($__g_hGDIPDll, "int", "GdipFillEllipse", "handle", $hCanvas, "handle", $hTexture_Earth, _ "float", $i, "float", $i, "float", $iDiameter - $i * 2, "float", $iDiameter - $i * 2) Next _GDIPlus_MatrixSetElements($hMatrix, 1, 0, 0, 1, 0, 0) _GDIPlus_GraphicsSetTransform($hCanvas, $hMatrix) _GDIPlus_GraphicsFillRect($hCanvas, $fDX, $fDY, $iDiameter, $iDiameter, $hBrush) _GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) ;draw background message text _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) ;blit drawn bitmap to GUI $iFPS += 1 If $bExit Then ExitLoop Until Not Sleep(10) AdlibUnRegister("CalcFPS") ;release resources _GDIPlus_BrushDispose($hBrush) _GDIPlus_PathDispose($hPath) _GDIPlus_MatrixDispose($hMatrix) _GDIPlus_ImageDispose($hImage_Earth) _GDIPlus_ImageDispose($hImage_Galaxy) _GDIPlus_BrushDispose($hTexture_Earth) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_BrushDispose($hBrush_FPS) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) EndFunc ;==>GDIPlus_RotatingEarth Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2016-12-01 ...Bitte Dateianhang herunterladen!
Mit der Variable $iStep in Zeile 73 kann man die Geschwindigkeit anpassen. Je höher desto schneller, aber die Qualität wird auch schlechter.
-
Die Hauptschleife produziert ein Memory Leak, d.h. du öffnest in der Schleife immer wieder neue GDI+ Handles ohne diese wieder freizugeben.
AutoItFor $i = 0 To $iImageHeight - 1 Step 1 ; Y Achse pro Pixel ein Bild generieren! For $j = 0 To $iImageWidth - 1 Step 1 ; X Achse pro Pixel ein Bild generieren! ..._GDIPlus_BitmapGetPixel ist relativ langsam -> schaue dir mal die _GDIPlus_BitmapLockBits Funktion an und wie man die Pixel Farbe ausliest. Innerhalb dieser Schleife solltest du auch keine Variablen deklarieren, macht keinen Sinn und kostet nur Zeit.
Ansonsten funzt der Code.
