Hi
Ihc möchte einfach nur zum test eine kleine menschenmenge über den bildschirm flitzen lassen
deswegen habe ich schnell ein skript erstellt
doch irgendwie erscheinen keine bilder, es sollte eigentlich alles richtig laufen (von der logik)
kann mir jemand weiterhelfen?
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <GuiConstants.au3>
#include <GdiPlus.au3>
#include <Misc.au3>
Local $max_x = 300, $max_y = 300
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$Gui = GUICreate("Beispiel", $max_x, $max_y)
[/autoit] [autoit][/autoit] [autoit]Dim $weg = _erstelle_weg($max_x, $max_y)
Dim $temp[2]
$move_figures = TimerInit()
$new_figure = TimerInit()
GUISetBkColor(0xFFFFFF, $Gui)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]; array mit allen figuren
Dim $figuren[1] = [0]
$height = _GDIPlus_ImageGetHeight($temp[0])
$width = _GDIPlus_ImageGetWidth($temp[0])
$verhaelnis = $height / $width
$graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
While True
; nach zufälligen abstand von 1 - 100 ms ein neues mänchen zeichen
If TimerDiff($new_figure) > Random(1, 100, 1) Then
; im index 0 das bildhandle, im index 1 die position auf dem weg-array
Local $temp[2] = [_GDIPlus_ImageLoadFromFile(@ScriptDir & "\figur.gif"), 0]
; neue figur
$figuren[0] += 1
; array ins n feld einfügen
_ArrayAdd($figuren, $temp)
; neuen stempel für die zufallswartezeit erstellen
$new_figure = TimerInit()
EndIf
; nach 10 ms verstrichener zeit, figuren erneut bewegen
If TimerDiff($move_figures) > 10 Then
; für alle figuren
For $i = 1 To $figuren[0]
; kopiere das array aus dem großen array zurück
Local $temp = $figuren[$i]
; lass männchen 1 position am weg wandern
$temp[1] += 1
; X- und Y-Koordinate aus dem weg der position des männchen lesen
Local $current_pos = $weg[$temp[1] + 1]
; geändertes kleines array (pos am weg) wieder zurück ins große array speichern
$figuren[$i] = $temp
; bild verschieben
_GDIPlus_GraphicsDrawImageRect($graphic, $temp[0], $current_pos[0], $current_pos[1], 20, 20 * $verhaelnis)
Next
$move_figures = TimerInit()
EndIf
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _erstelle_weg($max_x, $max_y)
Dim $weg[1] = [0]
Dim $pos[2] = [0, 0]
Local $x = 0, $y = 0
While($x < $max_x And $y < $max_y)
If Random(0, 1, 1) == 0 Then
$x += 1
Else
$y += 1
EndIf
$pos[0] = $x
$pos[1] = $y
$weg[0] += 1
_ArrayAdd($weg, $pos)
;~ GUICtrlCreatePic("line.bmp", $x, $y, 1, 1, $BS_BITMAP)
WEnd
Return $weg
EndFunc
das array $figuren enthält weitere arrays, im feld [0] steht wie viele
in den kleinen arrays ist index 0 das handle zum erstellten gdi bild
im index 1 die nummer, an welcher position des weges das aktuelle mänchen sich gerade befindet