Foro | | | | | Posesiones jetz veces otra vez una Kollisionsroutine con el Auto erstellt. Als erstes se el Kollisionsrechteck con IntersectRect(rechteck1#,rechteck2#,rechteck3#) abgefragt. Wenn el Variable colli&=1 entonces voluntad el Pixel después de Farbe abgefragt. Fast alles reine Profanbefehle sin hinterecken. Mit Profano2Cpp se lo echt rápidamente. Lo voluntad auch el Rechteckdaten ausgegeben welches de los beiden Kollionsrechtecken gebildet se. Kann uno auch todavía bien para Auswerten nehmen.
Dieses bitmap_header me está todavía una bisschen a lang. ¿Cómo se puede uno como qué einfaches kurzes reinsetzen? Gibt des dafür todavía una Profanbefehl?
mfg KompilierenMarcaSeparación $H Windows.ph
declare x1!,y1!,dx!,dy!,winkel!,y&,z&,z1&,z2&,z3&,groesse&
declare hWin&,hwin1&,hintergr&,hintergr1&,block&,hintergrauto&
declare width&,height&,ende&,bild_auto&,wert&
declare bmi# ,ogl_rgb#,b#,rechteck1#,rechteck2#,rechteck3#
declare xb1&,yb1&,xb2&,yb2&,xd&,yd&,colli&,xx1&,yy1&
groesse&=64*64*4
dim b#,groesse&
dim ogl_rgb#,groesse&
wert&=groesse&
ende&=1
Window 20,20-800,600
Cls @RGB(220,220,220)
hWin& = @Create(text, %hwnd, Test1, 10, 10, 64,64)
hWin1& = @Create(text,%hwnd, Test2, 200, 10,500,500)
hintergr&=create(hnewpic,500,500,$00ffff)
hintergr1&=create(hnewpic,500,500,$00ffff)
block&=create(hnewpic,64,64,$00ff00)
bild_auto&=create(hnewpic,64,64,$00ff00)
STRUCT rect = x&,y&,w&,h&
DIM rechteck1#, rect
DIM rechteck2#, rect
DIM rechteck3#, rect
oGL(Init, hwin&, 0,0, 0, 0)
oGL(PosMode, 1)
bild_auto& = Create(hnewPic,64,64,0 )
var tex.auto& = oGL(LoadTextureBMP,auto1.bmp,1)
mcls 64,64
height&=64
width&=64
bitmap_header
drawglscene
drawglscene
oglzubmp
dx!=100
dy!=100
drawscene
WHILE ende&
sleep 1
if isKey(81)
winkel!=winkel!+1.0
drawglscene
oglzubmp
drawscene
endif
if isKey(69)
winkel!=winkel!-1.0
drawglscene
oglzubmp
drawscene
endif
if isKey(87)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!-x1!
dy!=dy!-y1!
drawglscene
oglzubmp
drawscene
endif
if isKey(83)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!+x1!
dy!=dy!+y1!
drawglscene
oglzubmp
drawscene
endif
collision
StartPaint %hwnd
DrawText 10,300,(Format$(######0 ,colli&))
DrawText 10,320,(Format$(######0 ,z&))
DrawText 10,350,w +(Format$(######0 ,xd&))
DrawText 70,350,h +(Format$(######0 ,yd&))
DrawText 10,380,x +(Format$(######0 ,rechteck1#.x&))
DrawText 70,380,y +(Format$(######0 ,rechteck1#.y&))
DrawText 10,410,x1 +(Format$(######0 ,rechteck1#.w&))
DrawText 70,410,y1 +(Format$(######0 ,rechteck1#.h&))
endpaint
ENDWHILE
end
proc collision
With rechteck1#
.x& = 0
.y& = 0
.w& = 0
.h& = 0
EndWith
With rechteck2#
.x& = dx!
.y& = dy!
.w& = dx!+64
.h& = dy!+64
EndWith
With rechteck3#
.x& = 300
.y& = 200
.w& = 364
.h& = 264
EndWith
colli&=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
xb1&=rechteck1#.x&-300
yb1&=rechteck1#.y&-200
xb2&=rechteck1#.w&-300
yb2&=rechteck1#.h&-200
xd&=xb2&-xb1&
yd&=yb2&-yb1&
if colli&=1
pixelausgabe
endif
endproc
proc pixelausgabe
~GetDIBits(%hdc,hintergrauto&,0,64,b#,bmi#,0)
whileloop 0,wert&,4
z&=0
z1&=byte(b#,&loop)
z2&=byte(b#,&loop+2)
if (z1& > 200) or (z2& > 200)
z&=255
break
endif
endwhile
endproc
proc oglzubmp
ogl(glReadPixels,0,0,64,64,~GL_BGRA,~GL_UNSIGNED_BYTE,ogl_rgb#)
~setDIBits(%hdc,bild_auto&,0,64,ogl_rgb#,bmi#,0)
startpaint -1
drawpic bild_auto&,0,0;-1
endpaint
endproc
proc drawglscene
OGL(Clear)
OGL(origin,0,0,-1.11)
OGL(texture,tex.auto&,1)
OGL(rotate,0,0,winkel!)
OGL(quad,0.7,0.7)
OGL(show)
endproc
proc drawscene
startpaint hintergr&
drawpic hintergr1&,0,0;0
drawpic block&,300,200;0
mcopybmp 0,0 - 64,64 > dx!,dy!,-1
endpaint
startpaint hwin1&
drawpic hintergr&,0,0;0
endpaint
hintergrauto&=create(hpiccopy,hintergr&,300,200,64,64)
startpaint hwin&
drawpic hintergrauto&,0,100;0
endpaint
endproc
proc bitmap_header
def &BI_RGB 0
def &DIB_RGB_COLORS 0
struct BITMAPINFOHEADER =
biSize&, biWidth&, biHeight&, biPlanes%, biBitCount%, biCompression&,
biSizeImage&, biXPelsPerMeter&, biYPelsPerMeter&, biClrUsed&, biClrImportant&
dim bmi#,BITMAPINFOHEADER
clear bmi#
with bmi#
.biSize& = sizeof(bmi#)
.biWidth& = width&
.biHeight& = height&
.biPlanes% = 1
.biBitCount% = 32
.biCompression& = &BI_RGB
.biSizeImage& = ((.biWidth& * .biBitCount% 8 - 1) | 3 + 1) * endwith
ENDPROC
Auch otra vez el ASM-Rutina instalado para Auswerten el Pixelfarbe. Läuft con Profano2Cpp y el Xpia: KompilierenMarcaSeparación $H Windows.ph
declarar x1!,y1!,dx!,dy!,winkel!,y&,z&,groesse&
declarar hWin&,hwin1&,hintergr&,hintergr1&,block&,hintergrauto&
declarar width&,height&,ende&,bild_auto&
declarar bmi# ,ogl_rgb#,b#,rechteck1#,rechteck2#,rechteck3#
declarar xb1&,yb1&,xb2&,yb2&,xd&,yd&,colli&,xx1&,yy1&
groesse&=64*64*4
dim b#,groesse&
dim ogl_rgb#,groesse&
If 0
AsmStart rgb_farbe
Parámetros b#,groesse&
LOCAL r :BYTE
LOCAL g :BYTE
LOCAL b :BYTE
LOCAL n :DWORD
mov eax,para2
mov n,eax
mov ecx,0
mov ebx,para1
.mientras que ecx<=n
mov al,[ebx+ecx]
mov r,al
mov al,[ebx+ecx+1]
mov g,al
mov al,[ebx+ecx+2]
mov b,al
mov al,b
.if al>252
mov eax,255
.romper
.endif
mov al,g
.if al>252
mov eax,255
.romper
.endif
mov al,r
.if al>252
mov eax,255
.romper
.endif
add ecx,4
.endw
AsmEnd(z&)
endif
ende&=1
Ventana 20,20-800,600
Cls @RGB(220,220,220)
hWin& = @Crear(texto, %hwnd, Test1, 10, 10, 64,64)
hWin1& = @Crear(texto,%hwnd, Test2, 200, 10,500,500)
hintergr&=create(hnewpic,500,500,$00ffff)
hintergr1&=create(hnewpic,500,500,$00ffff)
block&=create(hnewpic,64,64,$00f000)
bild_auto&=create(hnewpic,64,64,$00ff00)
oGL(Init, hwin&, 0,0, 0, 0)
oGL(PosMode, 1)
bild_auto& = Crear(hnewPic,64,64,0 )
var tex.auto& = oGL(LoadTextureBMP,auto1.bmp,1)
STRUCT rect = x&,y&,w&,h&
DIM rechteck1#, rect
DIM rechteck2#, rect
DIM rechteck3#, rect
mcls 64,64
height&=64
width&=64
bitmap_header
drawglscene
drawglscene
oglzubmp
dx!=100
dy!=100
drawscene
WHILE ende&
sleep 1
if isKey(81)
winkel!=winkel!+1.0
drawglscene
oglzubmp
drawscene
endif
if isKey(69)
winkel!=winkel!-1.0
drawglscene
oglzubmp
drawscene
endif
if isKey(87)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!-x1!
dy!=dy!-y1!
drawglscene
oglzubmp
drawscene
endif
if isKey(83)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!+x1!
dy!=dy!+y1!
drawglscene
oglzubmp
drawscene
endif
collision
StartPaint %hwnd
DrawText 10,300,(Formato$(######0 ,colli&))
DrawText 10,320,(Formato$(######0 ,z&))
endpaint
ENDWHILE
end
proc collision
With rechteck1#
.x& = 0
.y& = 0
.w& = 0
.h& = 0
EndWith
With rechteck2#
.x& = dx!
.y& = dy!
.w& = dx!+64
.h& = dy!+64
EndWith
With rechteck3#
.x& = 300
.y& = 200
.w& = 364
.h& = 264
EndWith
colli&=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
if colli&=1
pixelausgabe
endif
ENDPROC
proc pixelausgabe
~GetDIBits(%hdc,hintergrauto&,0,64,b#,bmi#,0)
z&=Call(xpia_getprocaddressm(xpia_hmodule&,rgb_farbe),b#,groesse&)
ENDPROC
proc oglzubmp
ogl(glReadPixels,0,0,64,64,~GL_BGRA,~GL_UNSIGNED_BYTE,ogl_rgb#)
~setDIBits(%hdc,bild_auto&,0,64,ogl_rgb#,bmi#,0)
startpaint -1
drawpic bild_auto&,0,0;-1
endpaint
ENDPROC
proc drawglscene
OGL(Claro)
OGL(origin,0,0,-1.11)
OGL(texture,tex.auto&,1)
OGL(rotate,0,0,winkel!)
OGL(quad,0.7,0.7)
OGL(show)
ENDPROC
proc drawscene
startpaint hintergr&
drawpic hintergr1&,0,0;0
drawpic block&,300,200;0
mcopybmp 0,0 - 64,64 > dx!,dy!,-1
endpaint
startpaint hwin1&
drawpic hintergr&,0,0;0
endpaint
hintergrauto&=create(hpiccopy,hintergr&,300,200,64,64)
startpaint hwin&
drawpic hintergrauto&,0,100;0
endpaint
ENDPROC
proc bitmap_header
def &BI_RGB 0
def &DIB_RGB_COLORS 0
struct BITMAPINFOHEADER =
biSize&, biWidth&, biHeight&, biPlanes%, biBitCount%, biCompression&,
biSizeImage&, biXPelsPerMeter&, biYPelsPerMeter&, biClrUsed&, biClrImportant&
dim bmi#,BITMAPINFOHEADER
clear bmi#
with bmi#
.biSize& = sizeof(bmi#)
.biWidth& = width&
.biHeight& = height&
.biPlanes% = 1
.biBitCount% = 32
.biCompression& = &BI_RGB
.biSizeImage& = ((.biWidth& * .biBitCount% 8 - 1) | 3 + 1) * abs(.biHeight&)
endwith
ENDPROC
|
| | | | |
| | | ahora Yo el erweitert en diversas formas, no sólo en una Viereck Posesiones lo hier con un Kreis getestet.
Der Kollisionsblockkreis es grün fürs Auto. Der Maskenblock su es blau, links en el Bild a kontrolle.
Den Maskenblock lese Yo en un Bereichsvariable c#.
Mit el Profanbefehl intersect(r, r1#, r2#) lese Yo como erstes de , si una Block berührt se. Dann lese Yo el Maske de , wo el Maskenfarbe blau anfängt. Wenn el Maskenfarbe blau gefunden es, lese Yo darüber el Punkt de si como el farbe des Auto befindet.
Und con Profano2Cpp es una wahre Wonne, de el Geschwindigkeit her. Wenn una continuación otra vez una ASM-Rutina a Auswertung dazwischenhängt se aún más rápido. KompilierenMarcaSeparación $H Windows.ph
declare x1!,y1!,dx!,dy!,winkel!,y&,z&,z1&,z2&,z3&,groesse&
declare hWin&,hwin1&,hintergr&,hintergr1&,block&,blockhingr&,hintergrauto&
declare width&,height&,ende&,bild_auto&,wert&
declare bmi# ,ogl_rgb#,b#,c#,r1#,r2#
r1# = new(xpRect)
r2# = new(xpRect)
groesse&=64*64*4
dim b#,groesse&
dim c#,groesse&
dim ogl_rgb#,groesse&
wert&=groesse&
ende&=1
Window 20,20-800,600
Cls @RGB(220,220,220)
hWin& = @Create(text, %hwnd, Test1, 10, 10, 64,64)
hWin1& = @Create(text,%hwnd, Test2, 200, 10,500,500)
hintergr&=create(hnewpic,500,500,$00ffff)
hintergr1&=create(hnewpic,500,500,$00ffff)
block&=create(hnewpic,64,64,$000000)
blockhingr&=create(hnewpic,64,64,$000000)
bild_auto&=create(hnewpic,64,64,$00ff00)
startpaint blockhingr&
UsePen 0,1,@RGB(0,0,255)
UseBrush 1,@RGB(0,0,255)
Ellipse 10,10 - 50,50
endpaint
startpaint hwin&
drawpic blockhingr&,10,250;-1
endpaint
startpaint block&
UsePen 0,1,@RGB(0,255,0)
UseBrush 1,@RGB(0,255,0)
Ellipse 10,10 - 50,50
endpaint
oGL(Init, hwin&, 0,0, 0, 0)
oGL(PosMode, 1)
bild_auto& = Create(hnewPic,64,64,0 )
var tex.auto& = oGL(LoadTextureBMP,auto1.bmp,1)
mcls 64,64
height&=64
width&=64
bitmap_header
~GetDIBits(%hdc,blockhingr&,0,64,c#,bmi#,0)
drawglscene
drawglscene
oglzubmp
dx!=100
dy!=100
r2#.posx! = 300
r2#.posy! = 200
r2#.x! = 64
r2#.y! = 64
drawscene
WHILE ende&
sleep 1
if isKey(81)
winkel!=winkel!+1.0
drawglscene
oglzubmp
drawscene
endif
if isKey(69)
winkel!=winkel!-1.0
drawglscene
oglzubmp
drawscene
endif
if isKey(87)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!-x1!
dy!=dy!-y1!
drawglscene
oglzubmp
drawscene
endif
if isKey(83)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!+x1!
dy!=dy!+y1!
drawglscene
oglzubmp
drawscene
endif
if intersect(r, r1#, r2#)=1
pixelausgabe
endif
StartPaint %hwnd
DrawText 10,200,(Format$(######0 ,z&))
endpaint
ENDWHILE
end
proc pixelausgabe
~GetDIBits(%hdc,hintergrauto&,0,64,b#,bmi#,0)
whileloop 0,wert&,4
z&=0
z1&=byte(c#,&loop)
if z1& > 240
z1&=byte(b#,&loop)
z2&=byte(b#,&loop+2)
if (z1& > 200) or (z2& > 200)
z&=255
break
endif
ENDIF
endwhile
endproc
proc oglzubmp
ogl(glReadPixels,0,0,64,64,~GL_BGRA,~GL_UNSIGNED_BYTE,ogl_rgb#)
~setDIBits(%hdc,bild_auto&,0,64,ogl_rgb#,bmi#,0)
startpaint -1
drawpic bild_auto&,0,0;-1
endpaint
endproc
proc drawglscene
OGL(Clear)
OGL(origin,0,0,-1.11)
OGL(texture,tex.auto&,1)
OGL(rotate,0,0,winkel!)
OGL(quad,0.7,0.7)
OGL(show)
endproc
proc drawscene
startpaint hintergr&
drawpic hintergr1&,0,0;0
drawpic block&,300,200;-1
mcopybmp 0,0 - 64,64 > dx!,dy!,-1
r1#.posx! = dx!
r1#.posy! = dy!
r1#.x! = 64
r1#.y! = 64
endpaint
startpaint hwin1&
drawpic hintergr&,0,0;0
endpaint
hintergrauto&=create(hpiccopy,hintergr&,300,200,64,64)
startpaint hwin&
drawpic hintergrauto&,0,100;0
endpaint
endproc
proc bitmap_header
def &BI_RGB 0
def &DIB_RGB_COLORS 0
struct BITMAPINFOHEADER =
biSize&, biWidth&, biHeight&, biPlanes%, biBitCount%, biCompression&,
biSizeImage&, biXPelsPerMeter&, biYPelsPerMeter&, biClrUsed&, biClrImportant&
dim bmi#,BITMAPINFOHEADER
clear bmi#
with bmi#
.biSize& = sizeof(bmi#)
.biWidth& = width&
.biHeight& = height&
.biPlanes% = 1
.biBitCount% = 32
.biCompression& = &BI_RGB
.biSizeImage& = ((.biWidth& * .biBitCount% 8 - 1) | 3 + 1) * abs>(.biHeight&)
endwith
ENDPROC
|
| | | | |
| | Jac de Lad | Beim Ausführen des Codes stürzt mein Sistema komplet de. |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 07.03.2009 ▲ |
| |
| | | Der mag wohl XProfan no.... Muss en 32bit en el Grafik laufen. Ist con XProfan11.1 erstellt.
Yo tippe, el deiner el OGL-Befehle de XProfan no bearbeiten kann. Schau como una vez. Kennst du überhaupt OGL?
auto1.bmp musst du de oben todavía reinladen.
Es nichts besonderes drin alles harmlose XProfan11-Befehle, außer :
ogl(glReadPixels,0,0,64,64,~ GL_BGRA,~GL_UNSIGNED_BYTE,ogl_ rgb#) ~setDIBits(%hdc,bild_auto&,0,6 4,ogl_rgb#,bmi#,0)
Das mag wohl deiner no, veces Roland informieren.
Oder Yo kauf dir el Computer de...para ersten ...1 Euro.
Puedo incluso con Profano2Cpp kompilieren. Posesiones Borland c 5.5. Läuft Supi... Und si Profano2Cpp así durchläuft, entonces lo wasserdicht.
mfg |
| | | | |
| | Sebastian König | In el Code es soweit Yo el sehe tatsächlich una kleiner Fehler, el a una Choque führen kann, pero no muss (Yo hatte el gleiche Problema ya en un otro Hilo hingewiesen. Hier es el KompilierenMarcaSeparación con el siempre una kleines Stück en Bereichsgrenze (wert& = groesse&) hinaus gelesen se...
Konkret: Im letzten Schleifendurchlauf ha &loop valor groesse&, el &loop + algo en el Zugriffen kann entonces Problemas hacer.
MfG
Sebastian
Apéndice: Peter Bierbachh
Und con Profano2Cpp es una wahre Wonne, de el Geschwindigkeit her. [...] Und si Profano2Cpp así durchläuft, entonces lo wasserdicht.
Gracias! |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 3 subscriber: |