Von mir auch alles Gute Raupi!
Feiere schön und lass es ordentlich krachen
Beiträge von Sprenger120
-
-
Hi,
sry wenn ich das hier mal ausgrabe, aber Andy war so freundlich und hat die ganze Geschichte hier mal geupdatet.
Danke dafür und allen anderen viel Spaß damit. -
Hi,
wie währe es, wenn du ein kleineres Netzwerk aufbaust (4-5 PCs) und dann diese ihr Betriebsystem von einem Server ziehen lässt. Im Anschluss könnte man noch demonstrieren wie einfach es ist, Wartungsarbeiten (Windows Updates/Updates generell; neue Softwareinstallation usw.) einzuspielen ohne an jeden PC zu rennen. -
Hi,
entweder du packst die Datei als char Array in deinem Code ab (was den Speicherbedarf verdreifacht) oder du hängst sie hinten an die fertige Anwendung an und liest dann aus. -
-
Interessanter Denkansatz. Nur leider wüsste ich dazu jetzt keine Andere Lösung als die hier.
Was man machen könnte zu dem Problem des nicht Treffens ist, den Richtungsvektor aus v1-v0 zu normalisieren und dann mit einer großen Zahl multiplizieren um genug Reichweite zu haben.Eventuell sieht man es aus dem Script nicht wirklich raus, aber man bekommt auch geliefert wo genau die Kugel den Körper trifft was mit der Kleinsten Abstand Methode nur bedingt möglich währe wenn ich nicht falsch liege.
-
Zitat von UEZ
aber könnte er auch Kollisionen erkennen, wenn z.B. die Kugel einen größeren Bewegungsvektor hat, als das Objekt, das er durchdringt?
Solange sich die Kugel immernoch "hinter" der Box befindet, sollte das funktionieren. Soweit ich AABB verstanden habe kümmert es sich nur um die Richtung in die die Kugel fliegt.Andy: Sagen wir mal so: Die Maus ($v0) bist du als Spieler und der Fixe Punkt ($v1) ist dort wo du hinguckst. v1 ist nur Fix, weil ich ja irgentwie einen Vektor aus den Zwei Koordinaten machen muss.
Der Algorithmus ermittelt nur ob du die Box anguckst (mit dem Vektor schneidest).//Edit: Mars: Danke für die Antwort, habs zu spät gesehn
-
Hi there,
ich hab mich die letzten Tage, rein aus interesse, mal mit Vektoren beschäftigt und bin dann auch auf AABB gestoßen. AABB ist der Algorythmus der in abgewandelter Form in jedem Shooter benutzt wird um Die Kollision Kugel -> Hitbox zu überprüfen. Der Vorteil von AABB ist, das man keine Schleife braucht die die Schussbahn entlag geht und alle 2 Millimeter einzeln überprüft ob eine Kollision stattfindet.
Falls sich jemand noch weiter mit der Materie beschäftigen möchte, dem kann ich nur die Videos von Jorge Rodriguez empfehlenEventuell noch etwas zu dem Skript:
- Mit $vBoxMin,$vBoxMax wird das Viereck definiert
- $v1 ist ein Bezugspunkt der gebraucht wird um einen Vektor zu bilden, der letztenendes mit dem Viereck kollidieren sollSpoiler anzeigen
[autoit]#include <gdiplus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiConstantsEx.au3>
#include <Misc.au3>
_GDIPlus_Startup();HotKeySet("{Esc}", "_Exit")
[/autoit] [autoit][/autoit] [autoit]Global $iWindowH = 500
[/autoit] [autoit][/autoit] [autoit]
Global $iWindowW = 500
Global $dMouseAngle = 0.0
Global $rad2pi = 180 / 3.1415926535$hWindow = GUICreate("Test", $iWindowH, $iWindowW)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()
$hGr = _GDIPlus_GraphicsCreateFromHWND($hWindow)
_GDIPlus_GraphicsClear($hGr, 0xFFFFFFFF)Global $vBoxMin[2] = [50, 50]
[/autoit] [autoit][/autoit] [autoit]
Global $vBoxMax[2] = [120, 120]
Global $v1[2] = [300, 300]
Global $vInter[2];$hRed = _GDIPlus_PenCreate(0xFFFF0000)
[/autoit] [autoit][/autoit] [autoit]
$hGreen = _GDIPlus_PenCreate(0xFF00FF00)
$hBlue = _GDIPlus_PenCreate(0xFF0000FF)
While 1
Sleep(10)
Local $coord = GUIGetCursorInfo($hWindow)
If $coord[0] < 0 Or $coord[1] < 0 Then ContinueLoop
Local $vMouse[2] = [$coord[0], $coord[1]]
_GDIPlus_GraphicsClear($hGr, 0xFFFFFFFF)Local $fCollision = False;
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]if (LineIntersection($vBoxMin,$vBoxMax,$vMouse,$v1,$vInter)) Then
[/autoit] [autoit][/autoit] [autoit]
$fCollision = True
EndIfIf $fCollision Then
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawRect($hGr, $vBoxMin[0], $vBoxMin[1], $vBoxMax[0] - $vBoxMin[0], $vBoxMax[1] - $vBoxMin[1], $hGreen)
Else
_GDIPlus_GraphicsDrawRect($hGr, $vBoxMin[0], $vBoxMin[1], $vBoxMax[0] - $vBoxMin[0], $vBoxMax[1] - $vBoxMin[1], $hRed)
EndIf
_GDIPlus_GraphicsFillRect($hGr, $v1[0], $v1[1], 5, 5)
_GDIPlus_GraphicsDrawLine($hGr, $vMouse[0], $vMouse[1], $v1[0], $v1[1])
WEndFunc LineIntersection($vBoxMin, $vBoxMax, $v0, $v1,ByRef $vInter)
[/autoit] [autoit][/autoit] [autoit]
Local $f_low = 0;
$f_high = 1;if (not ClipLine(0,$vBoxMin,$vBoxMax,$v0,$v1,$f_low,$f_high)) Then
[/autoit] [autoit][/autoit] [autoit]
return False
EndIfif (not ClipLine(1,$vBoxMin,$vBoxMax,$v0,$v1,$f_low,$f_high)) Then
[/autoit] [autoit][/autoit] [autoit]
return False
EndIfLocal $b = vecSubtract($v1,$v0)
[/autoit] [autoit][/autoit] [autoit]
$vInter = vecAdd($v0, vecMultiply($b,$f_low))return true;
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>LineIntersectFunc ClipLine($d, $Pmin, $Pmax, $v0, $v1, ByRef $f_low, ByRef $f_high)
[/autoit] [autoit][/autoit] [autoit]
Local $f_lowDim = 0, $f_highDim = 1
Local $Len = ($v1[$d] - $v0[$d])if $Len = 0 then return false
[/autoit] [autoit][/autoit] [autoit]$f_lowDim = ($Pmin[$d] - $v0[$d]) / $Len
[/autoit] [autoit][/autoit] [autoit]
$f_highDim = ($Pmax[$d] - $v0[$d]) / $LenIf ($f_lowDim > $f_highDim) Then
[/autoit] [autoit][/autoit] [autoit]
swap($f_lowDim, $f_highDim)
EndIfIf ($f_highDim < $f_low) Then
[/autoit] [autoit][/autoit] [autoit]
Return False;
EndIfIf ($f_lowDim > $f_high) Then
[/autoit] [autoit][/autoit] [autoit]
Return False;
EndIf$f_low = max($f_lowDim, $f_low);
[/autoit] [autoit][/autoit] [autoit]
$f_high = min($f_highDim, $f_high);If ($f_low > $f_high) Then
[/autoit] [autoit][/autoit] [autoit]
Return False
EndIf
Return True;
EndFunc ;==>ClipLineFunc swap(ByRef $a, ByRef $b)
[/autoit] [autoit][/autoit] [autoit]
Local $tmp = $a;
$a = $b
$b = $tmp
EndFunc ;==>swapFunc max($a, $b)
[/autoit] [autoit][/autoit] [autoit]
If $a > $b Then
Return $a
Else
Return $b;
EndIf
EndFunc ;==>maxFunc min($a, $b)
[/autoit] [autoit][/autoit] [autoit]
If $a < $b Then
Return $a
Else
Return $b;
EndIf
EndFunc ;==>minFunc _Exit()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_GDIPlus_PenDispose($hGreen)
_GDIPlus_PenDispose($hGreen)
_GDIPlus_PenDispose($hRed)
_GDIPlus_GraphicsDispose($hGr)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_ExitFunc vecAdd($v1, $v2)
[/autoit] [autoit][/autoit] [autoit]
Local $rVec[2]
$rVec[0] = $v1[0] + $v2[0]
$rVec[1] = $v1[1] + $v2[1]
Return $rVec
EndFunc ;==>vecAddFunc vecMultiply($v1, $fVal)
[/autoit] [autoit][/autoit] [autoit]
Local $rVec[2]
$rVec[0] = $v1[0] * $fVal
$rVec[1] = $v1[1] * $fVal
Return $rVec
EndFunc ;==>vecMultiplyFunc vecSubtract($v2, $v1)
[/autoit]
Local $rVec[2]
$rVec[0] = $v2[0] - $v1[0]
$rVec[1] = $v2[1] - $v1[1]
Return $rVec
EndFunc ;==>vecSubtract(Jaja ich weiß der Code ist nicht wirklich das Gelbe vom Ei... Es ist ja nur zum Testen)
//Edit: Was ich evt. noch vergessen hab zu erwähnen: Man kann dieses 2D Beispiel auch auf 3D erweitern.
[autoit]
Dazu müsste man nur alle Vektoren noch eine Z Koordinate verpassen und noch eine weitere Dimensionsüberprüfung für Z hinzufügen
[/autoit]
;Func LineIntersection()
if (not ClipLine(2,$vBoxMin,$vBoxMax,$v0,$v1,$f_low,$f_high)) Then
return False
EndIf -
Hi,
ich hab diese wunderschöne Meldung jeden Tag mindestens 20 mal und bei mir liegt es an der Hardware... war eine Montagsproduktion.Also wenns nach nem Treiberupdate nicht mehr funktioniert würd ich sie mal evt zurückschicken.
-
Naja hatte auch erst mit dem Gedanken gespielt mir davon was zuzulegen aber Origin will ich meinem PC nicht antuen
Wer noch
Medal of Honorod. Mirrors Edge haben möchte, ich hätte da noch jeweils ein Key rumliegen (geschenkt bekommen ...)
-> Skype/PN -
Hi,
jetzt währe natürlich interessant zu wissen ob diese Larve sich in Staub und Fusseln "eingewickelt" hat und ihr wahres Äußeres verdeckt.
Nach ein bischen Nachforschen kommen Speckkäferlarven oder Larven diverser Motten in Frage. Wobei Motten wohl ehr warscheinlich sind. (Diese Biester fliegen in Massen in der Nacht in die Wohnstuben)[Blockierte Grafik: http://mw2.google.com/mw-panoramio/photos/medium/43738942.jpg] <- Speckkäfer
-
-
Hi,
wenn das Budget knapp ist kann ich nur dieses Buch empfehlen Link
Da sind zwar keine Templateklassen mit dabei aber sonst fast alle grundlegenden sachen -
-
Hi,
danke für die Glückwünsche.
Auch wenn ich euch gerade nicht wirklich aktiv bin hoffe ich doch bald wieder eine neue SB Sammlung rauszubringen. -
Alles gute nachträglich auch von mir
-
Hi,
nach langer konnte ich mich mal wieder hinreißen und habe etwas in AutoIt gemacht. Es handelt sich um eine optische Täuschung, bei der Streifen über ein bestimmtes Bild gezogen werden, um eine Animation zu erzeugen.
Da ich sehr fasziniert von diesem Video bin, versuchte ich mich an einer Implementation und siehe da: Es funktioniert. Wenn man sich etwas mehr mit dem Thema beschäftigen würde, könnte da bestimmt ein kleines Mini Game (oder etwas in der Richtung) draus werden.Wenn ihr die Motive wechseln wollt dann kommentiert einfach die verschiedenen $sPicture Variablen ein und aus. Die benutzten Bilder stammen nicht von mir und sind unter dem o.g. Video verlinkt.
Das Script kann man mit einem Tastendruck auf Escape beenden.Code
[autoit]#include <gdiplus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <winapi.au3>
#include <windowsconstants.au3>; ### Bildpfad anpassen!
[/autoit] [autoit][/autoit] [autoit]
Global $sPicture = @ScriptDir & "\0.jpg"
;~ Global $sPicture = @ScriptDir & "\1.jpg"
;~ Global $sPicture = @ScriptDir & "\2.jpg"
;~ Global $sPicture = @ScriptDir & "\3.jpg"
;~ Global $sPicture = @ScriptDir & "\4.jpg"
;~ Global $sPicture = @ScriptDir & "\5.jpg"
; ###Global $iWidth = 1024
[/autoit] [autoit][/autoit] [autoit]
Global $iHeight = 768
Local $iFPSRate = 100
Local $iOffsetRate = 2 ;1,2 oder 4HotKeySet("{ESC}", "_Exit")
[/autoit] [autoit][/autoit] [autoit]
$hGUI = GUICreate("Optische Täuschung - Animation", $iWidth, $iHeight)
GUISetState();Create Backbuffer
[/autoit] [autoit][/autoit] [autoit]
$hGUIDC = _WinAPI_GetDC($hGUI)
$hBackbufferBitmap = _WinAPI_CreateCompatibleBitmap($hGUIDC, $iWidth, $iHeight);
$hBackbufferDC = _WinAPI_CreateCompatibleDC($hGUIDC);
_WinAPI_SelectObject($hBackbufferDC, $hBackbufferBitmap);Gdi+ Startup
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_Startup()
$hBackbufferGraphics = _GDIPlus_GraphicsCreateFromHDC($hBackbufferDC);Load background
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$hImgBitmap = _WinAPI_CreateCompatibleBitmap($hGUIDC, $iWidth, $iHeight);
$hImgDC = _WinAPI_CreateCompatibleDC($hGUIDC);
_WinAPI_SelectObject($hImgDC, $hImgBitmap)
$hImageGraphics = _GDIPlus_GraphicsCreateFromHDC($hImgDC)
$hImage = _GDIPlus_ImageLoadFromFile($sPicture)
_GDIPlus_GraphicsDrawImageRect($hImageGraphics, $hImage, 0, 0, $iWidth, $iHeight)Local $iOffset = 0
[/autoit] [autoit][/autoit] [autoit]
Local $iTimePerFrame = (1/$iFPSRate) * 1000
local $hNTDLL = DllOpen("ntdll.dll")
Local $tTime = DllStructCreate("int64 time;")While Sleep(15)
[/autoit] [autoit][/autoit] [autoit]
$hTimer = TimerInit()_WinAPI_BitBlt($hBackbufferDC, 0, 0, $iWidth, $iHeight, $hImgDC, 0, 0, $SRCCOPY) ;Background
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsFillRect($hBackbufferGraphics, 0, 0, $iOffset - 2, $iHeight) ; First stripe;other stripes
[/autoit] [autoit][/autoit] [autoit]
For $x = 0 To $iWidth - 1 Step 2
_GDIPlus_GraphicsFillRect($hBackbufferGraphics, $x + $iOffset, 0, 16, $iHeight)
$x += 16
Next
$iOffset += $iOffsetRate
If $iOffset >= 16 Then $iOffset = 0_WinAPI_BitBlt($hGUIDC, 0, 0, $iWidth, $iHeight, $hBackbufferDC, 0, 0, $SRCCOPY) ; Back -> Frontbuffer
[/autoit] [autoit][/autoit] [autoit];frame control
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$iTime = TimerDiff($hTimer)
if $iTime < $iTimePerFrame Then _HighPrecisionSleep(($iTimePerFrame-$iTime)*1000)
WEndFunc _Exit()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_WinAPI_DeleteDC($hImgDC)
_WinAPI_DeleteObject($hImgBitmap)
_GDIPlus_GraphicsDispose($hImageGraphics)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hBackbufferGraphics)
_WinAPI_DeleteDC($hBackbufferDC)
_WinAPI_DeleteObject($hBackbufferBitmap)
_WinAPI_DeleteDC($hGUIDC)
_GDIPlus_Shutdown();
DllClose($hNTDLL)
Exit
EndFunc ;==>_Exit; Author ........: Andreas Karlsson (monoceres)
[/autoit]
; Modified.......: Sprenger120
Func _HighPrecisionSleep($iMicroSeconds,$hDll=False)
DllStructSetData($tTime,"time",-1*($iMicroSeconds*10))
DllCall($hNTDLL,"dword","ZwDelayExecution","int",0,"ptr",DllStructGetPtr($tTime))
EndFunc -
Hi,
[autoit]
die NULL über TCP zu senden ist kein ProblemTcpSend($Sock,"0x00")
[/autoit]
empfangen sollte eigentlich genau so gehen (mit gesetztem Binär Flag). _hextostring ist dann aber tabu, weil es die NULL wegschneidet, die ja bekanntlich das Ende einer C-Zeichenkette markiert. -
@Aspirin: Verdammte Axt, du hast recht...
Mann sollte auch nicht mehr zu diesen Uhrzeiten im Forum unterwegs sein o_O -
Das ist prinzipiell richtig. Intern werden die Daten nicht anders als in einem C-Array gespeichert. Dennoch steckt da herum noch ein Objekt mit einigen anderen Eigenschaften. Daher kann man es nicht direkt per DllCall wie ein C-Array ansprechen.
Ein vector ist eine verkettet Liste und keine C-Array. Jedes Element speichert einen Pointer zum nächsten und vorherigen und natürlich die Daten. Man hat also eine zusätzliche Datenlast von 8 Byte pro Element im Array (16 Byte unter 64 Bit) -
Hi,
wirklich eine coole Spielerei
Mal gucken wie sowas aussieht, wenn man ein 1024x768 Bild davon macht ohne die Pixel selber zu vergrößern.//Edit
100 Millionen Durchläufe: autoit.de/wcf/attachment/16157/
10 Millionen Durchläufe: autoit.de/wcf/attachment/16158/
5 Millionen Durchläufe: autoit.de/wcf/attachment/16159/Benutzter Quellcode:
Spoiler anzeigen
C
Alles anzeigen//Made by Sprenger120 //Date: 16.08.2012 #include <iostream> #include "EasyBMP.h" #include <random> #include <time.h> using namespace std; bool compareColors(RGBApixel& a,RGBApixel& b) { if (a.Blue == b.Blue && a.Green == b.Green && a.Red == b.Red) { return true; } return false; } void rotateDirection(bool fDirection,char& riDirect) { //false = left, true = right if (fDirection) { riDirect++; }else{ riDirect--; } if (riDirect > 3) {riDirect = 0;} if (riDirect < 0) {riDirect = 3;} } int main() { BMP bitmap; RGBApixel black; RGBApixel white; int iWidth = 1024; int iHeight = 768; __int64 iRounds = 5000000; int iCurrentPosX = iWidth/2; int iCurrentPosY = iHeight/2; char iDirection = 0; int iTimestamp = (int)time(NULL); bitmap.SetSize(iWidth,iHeight); std::srand(123312); black.Alpha = black.Blue = black.Green = black.Red = 0; white.Alpha = white.Blue = white.Green = white.Red = 0xff; for(__int64 iFinishedRounds = 0;iFinishedRounds<=iRounds;iFinishedRounds++) { if (iTimestamp != (int)time(NULL)) { cout<<"\rProgress: "<< ((iFinishedRounds*100) / iRounds) <<"% "; iTimestamp = (int)time(NULL); } switch (iDirection) { case 0: iCurrentPosX--; break; case 1: iCurrentPosY--; break; case 2: iCurrentPosX++; break; case 3: iCurrentPosY++; break; default: break; } if (iCurrentPosX == iWidth) {iCurrentPosX = 0;} if (iCurrentPosX < 0) {iCurrentPosX = iWidth-1;} if (iCurrentPosY == iHeight) {iCurrentPosY = 0;} if (iCurrentPosY < 0) {iCurrentPosY = iHeight-1;} if (compareColors(bitmap.GetPixel(iCurrentPosX,iCurrentPosY),white)) { //White bitmap.SetPixel(iCurrentPosX,iCurrentPosY,black); rotateDirection(true,iDirection); continue; }else{ bitmap.SetPixel(iCurrentPosX,iCurrentPosY,white); rotateDirection(false,iDirection); continue; } } bitmap.WriteToFile("test.bmp"); return 0; }
Die EasyBMP Sourcedateien gibts hier -
Hi,
[autoit]
versuch doch mal bitteSend("{ALTDOWN}t{ALTUP}")
[/autoit]