Español
Foro

Neue Kollisionsdemo

 
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


13 kB
Hochgeladen:06.03.2009
Ladeanzahl62
Descargar
 
06.03.2009  
 



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

 
07.03.2009  
 




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
 
07.03.2009  
 




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
whileloop 0,wert&,4re>
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!
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
07.03.2009  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

730 Views

Untitledvor 0 min.
Boroberto04.05.2016
Ernst02.03.2015
Lothar Dannhauer19.06.2012
Deli Beatz09.06.2012

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie