yxyx ich versuch nicht dasd die figur die bewegbar ist die koordinaten zu bereschen sondern einem festen balken (im script $balken) und will das wenn die figur den balken berührt wieder von vorne ist ich weiss nur nicht wie ich das schreiben soll.
@MrMultibot sei einfach leise wenn du was zu meckern hast behalts für dich ok???
Die Funktion der Buffers
-
- [ gelöst ]
-
BadBunny -
4. Juni 2010 um 17:06 -
Geschlossen -
Erledigt
-
-
man kann es sich so vorstellen als wäre eine fläsche mit einem rechteckigem loch und wenn die figur das loch berührt sprich , runterfällt startet sie von vorne
-
Ich hab hier mal ein paar Funktionen geschrieben, die dir vielleicht weiterhelfen.
Spoiler anzeigen
[autoit]Func _PointIsInCircle($iX_Point, $iY_Point, $iX_Circle, $iY_Circle, $iRadius_Circle)
[/autoit] [autoit][/autoit] [autoit]
$iDistPoints = _GetPointsDistance($iX_Point, $iY_Point, $iX_Circle, $iY_Circle)
If ($iRadius_Circle > 0 And $iDistPoints < $iRadius_Circle) Or ($iRadius_Circle < 0 And $iDistPoints > $iRadius_Circle) Or $iDistPoints = 0 Then Return True
Return False
EndFunc ;==>_PointIsInCircleFunc _CircleIsTouchingCircle($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2, $iRadius_Circle1, $iRadius_Circle2)
[/autoit] [autoit][/autoit] [autoit]
$iDistCircles = _GetPointsDistance($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2)
If $iDistCircles < $iRadius_Circle1 + $iRadius_Circle2 Then Return True
Return False
EndFunc ;==>_CircleIsTouchingCircleFunc _CircleIsInCircle($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2, $iRadius_Circle1, $iRadius_Circle2)
[/autoit] [autoit][/autoit] [autoit]
$iDistCircles = _GetPointsDistance($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2)
If $iRadius_Circle1 > $iRadius_Circle2 And $iDistCircles <= $iRadius_Circle1 - $iRadius_Circle2 Then Return True
If $iRadius_Circle1 < $iRadius_Circle2 And $iDistCircles <= $iRadius_Circle2 - $iRadius_Circle1 Then Return True
Return False
EndFunc ;==>_CircleIsInCircleFunc _PointIsInEllipse($iX_Point, $iY_Point, $iXM_Ellipse, $iYM_Ellipse, $iWidth_Ellipse, $iHeight_Ellipse)
[/autoit] [autoit][/autoit] [autoit]
If ($iX_Point - $iXM_Ellipse) ^ 2 / ($iWidth_Ellipse / 2) ^ 2 + ($iY_Point - $iYM_Ellipse) ^ 2 / ($iHeight_Ellipse / 2) ^ 2 <= 1 Then
Return 1
Else
Return 0
EndIf
EndFuncFunc _PtIsInRect($iX_Point, $iY_Point, $iX_Rect, $iY_Rect, $iWidth_Rect, $iHeight_Rect)
[/autoit] [autoit][/autoit] [autoit]
If $iX_Point >= $iX_Rect And $iY_Point >= $iY_Rect And $iX_Point <= $iX_Rect + $iWidth_Rect And $iY_Point <= $iY_Rect + $iHeight_Rect Then Return 1
Return 0
EndFunc ;==>_PtIsInRectFunc _GetPointsDistance($iPointX1, $iPointY1, $iPointX2, $iPointY2)
[/autoit]
Return Sqrt(($iPointX1 - $iPointX2) ^ 2 + ($iPointY1 - $iPointY2) ^ 2)
EndFunc ;==>_GetPointsDistance -
- Offizieller Beitrag
BadBunny: Hör endlich mit diesen Doppelposts auf! Benutze den Bearbeiten-Button, wenn Du noch etwas hinzufügen willst.
-
Oscar was meinst du denn??????? ich mach doch ein neuen post auf oder soll ich die überschrift ändern???????
-
du sollst nicht 2mal hintereinander posten.
wenn dir nach paar minuten noch was einfällt was du in deinem letzen post noch nicht gesagt hast dann bearbeite ihn einfach
-
achso danke...
Hey ich habs gerschafft!!! sry name22 aber was du geschrieben hast hab ich nicht kapiertalso ich hab das so gemacht :
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstants.au3>
#include <GdiPlus.au3>;das include
#include <Misc.au3>
MsgBox (0, "Aufgabe", "Komme zum Ziel ohne die schwarzen Balken zu berühren!!!")OnAutoItExitRegister("_end") ; die Funktion _end am Ende des Scriptes ausführen
[/autoit] [autoit][/autoit] [autoit]$x = 0;x und y deklarieren
[/autoit] [autoit][/autoit] [autoit]
$y = 0$Gui = GUICreate("Beispiel", 179, 163, 100,100)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_SHOW)_GDIPlus_Startup() ;Gdi starten
[/autoit] [autoit][/autoit] [autoit]$figur = _GDIPlus_ImageLoadFromFile(@DesktopDir & "\figur.gif")
[/autoit] [autoit][/autoit] [autoit]
$bk = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\weiss.jpg")
$balken = _GDIPlus_ImageLoadFromFile (@ScriptDir & "\balken.gif")
$ziel = _GDIPlus_ImageLoadFromFile (@ScriptDir & "\ZIEL.gif")
$height = _GDIPlus_ImageGetHeight($figur)
$width = _GDIPlus_ImageGetWidth($figur)
$verhaelnis = $height / $width
$graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
$bitmap = _GDIPlus_BitmapCreateFromGraphics(179, 163, $graphic)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
$buffer1 = _GDIPlus_ImageGetGraphicsContext($bitmap)While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Select
Case _IsPressed(25) and not $x <= 0 ; nach links
$x -= 3
Case _IsPressed(26) and not $y <= 0; nach oben
$y -= 3
Case _IsPressed(27) and $x <= 160 ; nach rechts
$x += 3
Case _IsPressed(28) and $y <= 135 ; nach unten
$y += 3
EndSelect_GDIPlus_GraphicsDrawImageRect($buffer,$bk,0,0,179, 163)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$balken2 =_GDIPlus_GraphicsDrawImageRect($buffer,$balken,25, 30, 100, 10)
_GDIPlus_GraphicsDrawImageRect ($buffer, $ziel, 160, 135, 20,20 )
_GDIPlus_GraphicsDrawImageRect($buffer,$figur,$x,$y,25, 25 * $verhaelnis)
_GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0)
Sleep(30)If $y <= 36 and $y >= 15 and $x >= 3 And $x <=123 Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$x =0
$y= 0
ElseIf $x >= 155 and $x <= 170 and $y <= 140 and $y >= 115 Then
MsgBox (0, "Win","du hast gewonnen!!! ", 10)
Exit
EndIfWEnd
[/autoit] [autoit][/autoit] [autoit]Func _end ();die Exit funktion
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
_GDIPlus_GraphicsDispose($graphic);Grafik Objekt freigeben
_GDIPlus_GraphicsDispose($buffer)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_ImageDispose ($balken)
_GDIPlus_ImageDispose($figur);Bild Objekt 1 freigeben
_GDIPlus_ImageDispose($bk);Bild Objekt 2 freigeben
_GDIPlus_Shutdown();Ressourcen freigeben
EndFunc -
Joa so gehts auch, hättest auch einfach das hier
Spoiler anzeigen
[autoit]Select
[/autoit]
Case _IsPressed(25) and not $x <= 0 ; nach links
$x -= 3
Case _IsPressed(26) and not $y <= 0; nach oben
$y -= 3
Case _IsPressed(27) and $x <= 160 ; nach rechts
$x += 3
Case _IsPressed(28) and $y <= 135 ; nach unten
$y += 3
EndSelecterweitern können : and not blabla and not blabla......
MfG Hellboy
-
Na jetzt habt ihr es ihm
zumindest halbgecodet ohne das er lesen musste.
Leider muss ich Mr.MultiBot rechtgeben (in seinem letzten Post)Wie gesagt weigere ich mich hier zu helfen.
mfg Ubuntu
Ps: Ich glaube nicht das mein Tut keine Fragen offen lässt aber im Prizip standen die letzten Posts hier so ähnlich im Tutorial und wenn einer überhaupt keine eigeninitiantive zeigt, dann hab ich keine Lust für ihn zu schreiben.
-
Ps: Ich glaube nicht das mein Tut keine Fragen offen lässt aber im Prizip standen die letzten Posts hier so ähnlich im Tutorial und wenn einer überhaupt keine eigeninitiantive zeigt, dann hab ich keine Lust für ihn zu schreiben.
jup seh ich auch so.
grundsätzlich sollte es erstmal jeder selbst probieren.
wenn dann hilfe benötigt wird kann sich ja jeder gerne melden. (mit script)BadBunny: übernimm dich für die ersten scripts nicht allzusehr.
mit gdi+ arbeiten eher wenig. natürlich kann man sehr tolle sachen damit machen aber grundlagen sollte man ersteinmal wo anders lernen
is meine meinung dazu... -