[autoit]
_ArrayUnique
[/autoit]_ArrayUnique
[/autoit]Das SSpanisch ist am Handy entstanden. Nachts, betrunken, mit einer Hand, im Halbschlaf. Da passiert sowas schonmal.
Verstehe ich das richtig, ein Knollen fürs zu langsam fahren von einem netten Mann auf einem Fahrrad ? Das klingt irgendwie SSpanisch
Update: Fast alles was geplant war ist nun drin, fast
Willkommen im Forum,
Um ein bisschen reinzukommen ist es sinnvoll die Tutorialabteilung zu besuchen. Mit etwas Übung kommst du auch schnell dahinter welche Bereiche dich interessieren (Tools, Programme, Spiele, usw).
lg
M
Funktionen für einige Kollisionsabfragen habe ich mal gesammelt und auf Tempo hin optimiert. (Damals gab es den ternären operator noch nicht, daher kann man sicherlich noch etwas Geschwindigkeit rausholen).
Klick mich !
Um zwei rechtecke zu überprüfen gibts das hier:
Klick Mich !
(ganz runter scrollen. Der letzte Codeabschnitt ist eine effiziente Kollisionsfunktion)
Hier die AutoIt Funktion für 2 Rechtecke:
Func _Kollision_Viereck_Viereck($x1, $y1, $b1, $h1, $x2, $y2, $b2, $h2) ;Selbsterklärend
Return ($x1 + $b1 > $x2 And $y1 + $h1 > $y2 And $x1 < $x2 + $b2 And $y1 < $y2 + $h2)
EndFunc ;==>_Kollision_Viereck_Viereck
Windows 8.1, x64, GrooveLoad 1.8.0.0
Wenn ich ein Lied herunterlade wird es "zerhackt" (also in kleinen Teilen heruntergeladen und anschließend zusammengesetzt). Das ist soweit auch in Ordnung, aber leider gibt es immer ca. 0.5 Sekunden lange Pausen zwischen den Einzelteilen -> Das Lied läuft wie gewohnt ab, aber alle ca. 4 Sekunden kommt eine halbe Sekunde Stille.
Edit: Scheint wohl ein einmaliges Problem mit meinem Computer zu sein. Habe eben einen Test gemacht wo bei Programmen die definitiv früher funktioniert haben das gleiche Problem auftritt. Also falscher Alarm
lg
M
Interessant, die von mir benutzte FASM liegt doch in der zip mit drinnen ?
Das einzige was ich bemerkt habe sind die <FASM.au3> statt "FASM.au3". Wenn man das ändert wird die Version im Ordner bevorzugt eingesetzt (glaube ich jedenfalls).
Zu den Variablen: Da bin ich mir immernoch nicht soo sicher, funktionieren müsste es natürlich, sofern der ASM erst zusammenbebaut wird wenn die Structs schon fertig sind.
bollen: Wenn der Code länger ist stürzt es ab ? Bitte um Beispiel...
lg
M
Wenn er das geschrieben hätte um zu provizieren, dass jemand ihm unterstellt, er hätte das geschrieben, damit die anderen sich erniedrigen, (zu viele Kommas) so ist er ebenso schlau wie als wenn er nicht berücksichtigt hätte, dass ihm jemand unterstellt, dass er das nur geschrieben hat um andere dazu zu bewegen sich zu erniedrigen. Villeicht sogar noch schlauer.
Und wenn er diesen Kommentar ebenfalls einkalkuliert hat muss er Gott gewesen sein
Wenn der Mensch der den Thread erstellt hat villeicht absichtlich so einen Unfug fabriziert hat, damit andere sich erniedrigen, wärend er selbst mit IQ150 an seinem PC sitzt und die anderen auslacht ?
Ich hab auch nicht daran gezweifelt, dass du sowas weißt. Wollte nur mal prahlen dass ich es auch weiß
Synchrotonstrahlung entsteht wenn bewegte Ladungen auf eine nicht gradlinige Bahn gebracht werden. Sie skaliert allgemein mit v³ in Bezug auf (v/c)³.
Wir wissen, dass Ladungen in Kabeln nur mit einigen mm/s unterwegs sind. -> v/c ist ca 0m/s -> (v/c)³ ist noch viel viel näher an 0 ! -> Abstrahlungsverluste = 0 !
Ich tippe daher auf Käfer
Ohje, das ist aus 2 Gründen ziemlich gewagt...
1. Der ASM Code wird nicht mehr synchron zu den Frames gerendert. Vorher: Jeder Frame = 1 Durchlauf
2. Zum Glück ist die Aufenthaltswahrscheinlichkeit im ASM zu sein recht gering. Wenn der Timer dazwischenfunkt kann es Abstürze geben.
Wenn du den Code schneller haben willst, dann stell einfach die FPS in Zeile 13 auf 9999, dann arbeitet er so schnell er kann.
Edit: Das klang jetzt viel negativer als gewollt :S, ich meine es nicht böse
Moin,
Wie sagt Andy immer so schön: "Damals war alles besser... int21h, dann direkt in den Grafikspeicher ab 0B000h (PS: Diese Adresse ist für monochromatische Grafik ) reingeballert, und die Welt programmiert sich fast von alleine"
(Der korrekte Wortlaut muss nicht mit Obigem übereinstimmen )
Was das Skript können soll:
Es stellt eine Umgebung bereit (ein Fenster variabler Größe, einen Grafikpuffer, etwas RAM) in der man mit ASM ohne weiteres "direkt" (das ist die schönste Lüge die mir heute über die Lippen geht) ins Fenster zeichnen kann.
Was es wirklich tut:
Es stellt eine Umgebung bereit (ein Fenster variabler Größe, einen Grafikpuffer, etwas RAM) in der man mit ASM ohne weiteres so tun kann als würde man "direkt" ins Fenster zeichnen.
Tatsächlich zeichnet man nur in eine Struct, die wiederum Teil eines WinAPI-GDI Puffers ist (kein GDI+), der wiederum mit einer voreingestellten Framerate ins Fenster verfrachtet wird (BitBlt). Dabei werden zwar nanosleep und Timer benutzt, zu 100% trifft man den vsync aber nicht, es ruckelt wenn es möchte. Ein sehr kleines, aber gut Kommentiertes Beispiel ist dabei. Wenn man selbst basteln will, so möge man NUR den ASM Code im Beispiel ändern, das restliche Skript stellt die Umgebung bereit. Wer Erweiterungen oder Sonstiges vornehmen will darf dies gerne tun
Und wenns keiner braucht nehm ichs selbst
lg
M
Die verschachtelte For Methode müsste genau das gleiche Ergebnis liefern (und ist dabei mindestens 50x schneller).
Da ArrayDelete auch 2D Arrays verdaut kann man ohne Probleme auch 2D Arrays benutzen (im Vergleich dann aber ein [0] oder ein [1] dranhängen, je nachdem ob du PID oder Name vergleichen willst)
Brauchst 3 Schritte:
1. Verbinde beide Arrays (a und b) zu einem Array (c1) mit allen Einträgen
2. Benutze ArrayUnique bei Array (c1)
2.1 Kopiere (c1) in (c2)
3. Lösche alle Einträge aus Array (c1) die in Array (a) vorkommen -> (c1) = Liste 1
3. Lösche alle Einträge aus Array (c2) die in Array (b) vorkommen -> (c2) = Liste 2
(nimm am Besten PIDs damit es keine Namenskonflikte gibt)
Moin,
Es ist nur ein sehr kleines Skript, kann aber sicherlich vielerorts gebraucht werden.
Das Prinzip habe ich aus CreepTD abgeschaut. (Dort werden Gegner und Tower mit dieser Methode animiert)
Funktionsweise:
Man erstellt ein mit GDI+ kompatibeles Bild (z.B. png) welches nebeneinander gereiht sämtliche Frames enthält. Das resultierende Bild ist ein Pixel höher als eigentlich nötig und die obere Zeile ist vollkommen transparent. Zu Beginn jedes Frames setzt man oben links (also außerhalb des angezeigten Bereichs) einen Pixel mit der Hexadezimalen Darstellung der Framedauer. (z.B. 0xFF0000FF = 255 ms).
Ist ein Bild so präpariert kann man es direkt laden und animiert anzeigen lassen.
Ähnliche Skripte gibt es schon (auch für gif), aber ich denke dieses hier ist sehr einfach (selbst für völlige Laien) verständlich und leicht zu benutzen.
#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]Global $hGUI, $hGFX, $hBMP, $hBUF, $hANI
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate('Test', 300, 300)
$hGFX = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBMP = _GDIPlus_BitmapCreateFromGraphics(300, 300, $hGFX)
$hBUF = _GDIPlus_ImageGetGraphicsContext($hBMP)
$hANI = _GDIPlus_AnimationCreateFromFile('Test.png')
_GDIPlus_GraphicsSetInterpolationMode($hBUF, 5)
_GDIPlus_GraphicsSetPixelOffsetMode($hBUF, 2)
GUISetState()
[/autoit] [autoit][/autoit] [autoit]While GUIGetMsg() <> -3
_GDIPlus_GraphicsClear($hBUF, 0xFF808080)
_GDIPlus_GraphicsDrawAnimationRect($hBUF, $hANI, 50, 50, 200, 200)
_GDIPlus_GraphicsDrawImage($hGFX, $hBMP, 0, 0)
WEnd
_GDIPlus_AnimationDispose($hANI)
_GDIPlus_GraphicsDispose($hBUF)
_GDIPlus_BitmapDispose($hBMP)
_GDIPlus_GraphicsDispose($hGFX)
_GDIPlus_Shutdown()
Func _GDIPlus_AnimationCreateFromFile($sPath)
Local $aRET[8] ; 0 - ImageHandle, 1 - Breite, 2 - Höhe, 3 - Anzahl, 4 - Timer, 5 - Aktuelles Bild, 6 - TimeArray
$aRET[0] = _GDIPlus_ImageLoadFromFile($sPath)
If @error Then Return SetError(@error, 0, 0)
$aRET[2] = _GDIPlus_ImageGetHeight($aRET[0]) - 1
Local $iW = _GDIPlus_ImageGetWidth($aRET[0])
For $i = 1 To $iW - 1 Step 1
If Not _GDIPlus_BitmapGetPixel($aRET[0], $i, 0) = 0 Then ExitLoop
Next
$aRET[3] = Int(Round($iW / $i, 0))
$aRET[1] = $i
Local $aTIME[$aRET[3]]
For $i = 0 To $aRET[3] - 1 Step 1
$aTIME[$i] = BitAND(0xFFFFFF, _GDIPlus_BitmapGetPixel($aRET[0], $i * $aRET[2], 0))
Next
$aRET[4] = TimerInit()
$aRET[5] = 0
$aRET[6] = $aTIME
Return $aRET
EndFunc
Func _GDIPlus_GraphicsDrawAnimationRect($hGFX, ByRef $hANI, $iX, $iY, $iW, $iH)
Local $aTIME = $hANI[6]
If TimerDiff($hANI[4]) > $aTIME[$hANI[5]] Then
$hANI[4] = TimerInit()
$hANI[5] += 1
If $hANI[5] = $hANI[3] Then $hANI[5] = 0
EndIf
ToolTip(Int(TimerDiff($hANI[4])) & '/' & $aTIME[$hANI[5]]) ; Nur zur demonstration, daher später unbedingt auskommentieren !
_GDIPlus_GraphicsDrawImageRectRect($hGFX, $hANI[0], $hANI[1] * $hANI[5], 1, $hANI[1], $hANI[2], $iX, $iY, $iW, $iH)
EndFunc
Func _GDIPlus_AnimationDispose(ByRef $hANI)
_GDIPlus_ImageDispose($hANI[0])
$hANI = 0
EndFunc
PS: Da ImageDrawRectRect benutzt wird ist ggf ein Pixeloffset zu setzen (wie im Beispiel), da ansonsten die Ränder falsch angezeigt werden. Der Interpolationmode ist nur optischer Schnickschnack, weil das Bild 16x16 Px groß ist.
[Fix]: Grober Schnitzer in der Annahme jedes Bild wäre 16px breit
lg
M
Schielst du da auf mich ?
Ich kann sowas mehr oder weniger, finde aber oft nicht die Lust irgendwas zu erstellen.
Wenn relativ genaue Spezifikationen vorliegen kann ich ja mal versuchen ein paar Kleinigkeiten zu basteln.
Wichtig ist da folgendes:
- Welche Farbpaletten sollen genutzt werden (16 Farben, 32, 256, usw...)
- Um wie viele Avatare, Gebäude, usw handelt es sich, gibt es überhaupt eine feste Anzahl
- Welcher Stil soll gewahrt bleiben, für PixelArt gibt es unmengen Stile
- Wie verstehst du "Pixel-Grafik" ? Grafik mit geringer Auflösung, oder Flash-ähnliche Grafik ?
- Wird eine eigene "Pixel"-Schriftart benötigt ?
Sehr schöne Sache, und vorallem greifbar.
Direct2D wandert aus großer Ferne, schrittweise, immer weiter zu uns
Bin ja mal gespannt wie es hier weitergeht, ich wollte schon eine ganze Weile umsteigen, aber die UDF von trancexx hat mir irgendwie nicht gefallen :pinch:
Was die Leute heutzutage alles studieren^^
Als langweiliger Physik-, oder Informatikstudent fühlt man sich zwar wie MacGyver, hat aber kein Fach mit übergeilem Namen studiert
Edit: OT in einem OT-Thread ist was feines