Hallo
Hab folgenden Code zurzeit:
#include <Array.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
Opt("GUIOnEventMode", 1)
OnAutoItExitRegister("__GDIPlus_Shutdown")
global const $PI = 3.1415926535
global const $degToRad = $PI / 180
_GDIPlus_Startup()
[/autoit][autoit][/autoit][autoit]Global $iWidth = 400, $iHeight = 400
$GUI_Back_Color = 0xFF000000 + 0xF0F0F0
$hGUI = GUICreate("", $iWidth, $iHeight)
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
;Erstmal das normale Grafik-Objekt erstellen.
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphic)
;Statt uns mit dem normalen Frontbuffer zufrieden zu geben, erstellen wir erstmal eine
;Bitmap, mit Bezug auf unser Grafikobjekt.
$hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
;Nachdem unser Bitmap erstellt ist, holen wir uns den Graphics Context. Dieser
;wird von uns verwendet, um darin zu zeichnen.
GUISetOnEvent(-3, "_Exit")
GUIRegisterMsg($WM_PAINT, "WM_PAINT")
GUISetState()
$kugel1 = _GDIPlus_BitmapCreateFromFile("kugeln/kugel.bmp")
$kugel2 = _GDIPlus_BitmapCreateFromFile("kugeln/kugel.bmp")
$x = 200
$y = 200
$reibung = 0.985
$speed = 2
$richtung = 90
msgbox(0, "", xverschiebung($richtung, 10) & "&" & yverschiebung($richtung, 10))
While 1 * Sleep(10)
_GDIPlus_GraphicsClear($hBackbuffer, $GUI_Back_Color)
; Super Radierer benutzen um alten Backbuffer zu löschen
$speed = $speed * $reibung
$y = $y - $speed
_GDIPlus_GraphicsDrawImage($hBackbuffer, $kugel1, 200, Round($y, 0))
if $speed < 0.03 Then
msgbox(0, "ende", "ENDE")
endif
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_INTERNALPAINT)
; WM_PAINT wird nur aufgerufen, wenn alle Berechnungen fertig sind!
; In WM_PAINT wird selbst nichts berechnet, oder gezeichnet. diese Funktion wird nur das
; Bitmap-Objekt in das Grafik-Objekt übertragen.
WEnd
Func _Exit()
Exit
EndFunc ;==>_Exit
Func WM_PAINT()
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iWidth, $iHeight)
; _GDIPlus_GraphicsDrawImageRect() überträgt den Backbuffer in den Frontbuffer.
; Der erste Parameter ist unser Frontbuffer (Grafik Objekt).
; Der zweite ist unsere Bitmap, welche ja als BackBuffer fungiert.
; Darauf folgt der Abschnitt den man übertragen will.
; i.d.R. ist es 0, 0 für X und Y koordinaten, und die GUI Breite und Höhe für
; Width und Height. Kommt natürlich immer drauf an, wie groß euer Grafikobjekt ist,
; und ob ihr den vollen Teil zeichnen wollt.
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_PAINT
Func __GDIPlus_Shutdown()
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
EndFunc ;==>__GDIPlus_Shutdown
Func xverschiebung($grad, $strecke)
Return Sin($grad*$degToRad)*$strecke
endfunc
Func yverschiebung($grad, $strecke)
Return Cos($grad*$degToRad)*$strecke
endfunc
das ganze Grafikzeugs is erstmal unwichtig, wichtig ist die msgbox oben.
Also bei 0 grad bewegt sich das teil 10 nach oben, bei 90 Grad kommt allerdings 10 nach rechts (was ja richtig wäre) und 4.irgendwas nach unten. was is da falsch?[MSIE_newline_end ]