Español
Foro

¡Hola IF, Drehung uno Grafik con XPSE no en el Screen...Nativo nProc..

 

funkheld
¡Hola, Frohe Ostern.
Yo brauche Por favor, una vez Ayuda para el Drehung uno Grafik.

Yo möchte el gedrehte Grafik hier rein bringen:
bpic1& = create("hNewPic", 128,128,rgb(0,0,0))
y no en el Bildschirm .

Como va el ?

Gracias.

Gruss
declarar bpic&,ende&,hWin&,winkel&,hDCWin&
ende&=1
bpic& = create("HPIC",-1,"auto.bmp")
Ventana 20,20-400,400
Cls RGB(220,220,220)
hWin& = @Crear("text", %hWnd, "", 10,10, 300,300)
hDCWin& = ~GetDC(hWin&)

WHILE ende&

    if isKey(81)

        winkel&=winkel&-100
        cls
        drawhPicRotated(bpic&,hDCWin&,100,100,128,128,winkel&,50)

    endif

    if isKey(69)

        winkel&=winkel&+100
        cls
        drawhPicRotated(bpic&,hDCWin&,100,100,128,128,winkel&,50)

    endif

ENDWHILE

end

nProc getCircP(long r,w)

    volver long(sin(0.0174532925199433*float(w)/1000.0)*float(r))

ENDPROC

nProc angleByLine(long x,y,xx,yy)

    sub y,yy
    sub x,xx

    if x

        xx=int(57295.77951 * arctan(float(y)/float(x)))
        caso x>0 : volver 270000 + xx
        volver 90000 + xx

    endif

    caso y<0 : volver 180000
    volver 0

ENDPROC

nProc drawhPicRotated(long hPic,dc,x,y,xx,yy,w,r)

    long hDCBits=createCompatibleDC(hDC)
    selectObject(hDCBits, hPic)
    long pts=dim(24)
    long 	w1=angleByLine(xx,yy,0,0),w2=abs(w1-360000),w3=abs(w1-540000)
    casenot r : r=long(sqrt(float(xx*xx+yy*yy)))\2
    long pts&,0=x+getcircp(r,w1+w),y+getcircp(r,w1-90000+w),x+getcircp(r,w2+w),y+getcircp(r,w2-90000+w),x+getcircp(r,w3+w),y+getcircp(r,w3-90000+w)
    plgBlt(dc,pts,hDCBits,0,0,xx,yy,0,0,0)
    deleteDC(hDCBits)
    disponer(pts)

ENDPROC

 
07.04.2012  
 



Wenn uno una Trick nutzt el %hDC después de StartPaint en una hPic el DC des "hPics" zurückgibt entonces así:
 {$cleq}
 {$compiler c:\XProfan11\}
 {$runtime c:\XProfan11\}
declarar bpic&,ende&,winkel&
ende&=1
bpic& = create("HPIC",-1,"c:\\auto.bmp")
Ventana 20,20-400,400
Cls RGB(220,220,220)
var bpic1& = create("hNewPic", 128,128,rgb(0,0,0))

WHILE ende&

    waitinput 10
    startpaint bpic1&
    drawhPicRotated(bpic&,hDC,64,64,128,128,winkel&,50)
    endpaint
    drawpic bpic1&,0,0;0
    winkel&=rnd(360000)

ENDWHILE

end

nProc getCircP(long r,w)

    volver long(sin(0.0174532925199433*float(w)/1000.0)*float(r))

ENDPROC

nProc angleByLine(long x,y,xx,yy)

    sub y,yy
    sub x,xx

    if x

        xx=int(57295.77951 * arctan(float(y)/float(x)))
        caso x>0 : volver 270000 + xx
        volver 90000 + xx

    endif

    caso y<0 : volver 180000
    volver 0

ENDPROC

nProc drawhPicRotated(long hPic,dc,x,y,xx,yy,w,r)

    long hDCBits=createCompatibleDC(hDC)
    selectObject(hDCBits, hPic)
    long pts=dim(24)
    long 	w1=angleByLine(xx,yy,0,0),w2=abs(w1-360000),w3=abs(w1-540000)
    casenot r : r=long(sqrt(float(xx*xx+yy*yy)))\2
    long pts&,0=x+getcircp(r,w1+w),y+getcircp(r,w1-90000+w),x+getcircp(r,w2+w),y+getcircp(r,w2-90000+w),x+getcircp(r,w3+w),y+getcircp(r,w3-90000+w)
    plgBlt(dc,pts,hDCBits,0,0,xx,yy,0,0,0)
    deleteDC(hDCBits)
    disponer(pts)

ENDPROC

 
09.04.2012  
 




funkheld
Jup, danke. Es Klasse.

Gruss
 
09.04.2012  
 




funkheld
Jup, lo klappt wunderbar esta Nativo nProc drawhPicRotated(long hPic,dc,x,y,xx,yy,w,r) con XPSE el du erstellst hast.

Mit el Tasten Q/E puede ser una Sprite rotieren y el Tasten W/S puede ser lo bewegen.

In wieweit voluntad unten el Routinen vom XPSE beschleunigt?

¿Cómo se puede uno con el Rutina nProc drawhPicRotated una Drehung hacer en una verlegten Rotate-XY-Punkt? Jetzt dreht lo sí siempre en el Mittelpunkt.

Mit el Variables "r" en el nProc Yo ahora el grösse eingestellt vom Sprite. Aber me es todavía no klar, si algo con el Grössenveränderung a tun ha? So bastante habe el Zusammenhang dazu no verstanden.

Gracias.

Gruss
 {$cleq}
 {$compiler d:\XProfan11\}
 {$runtime d:\XProfan11\}
declarar bpic&, bpic1&,ende&,winkel!,hintergrpic&,vordergrpic&
declarar x1!,y1!,dx!,dy!
ende&=1
bpic& = create("HPIC",-1,"data\\auto.bmp")
Ventana 20,20-800,600
Cls RGB(220,220,220)
bpic1& = create("hNewPic", 64,64,rgb(0,0,0))
hintergrpic& = create("hNewPic", 500,500,rgb(255,255,0))
vordergrpic& = create("hNewPic", 500,500,rgb(255,255,0))
startpaint hintergrpic&
usebrush 1,rgb(0,128,255)
ellipse 200,200-250,250
endpaint

WHILE ende&

    if isKey(87)

        y1!=Sin((winkel!/1000)/180.0*pi())*0.2
        x1!=Cos((winkel!/1000)/180.0*pi())*0.2
        dx!=dx!-x1!
        dy!=dy!-y1!

    endif

    if isKey(83)

        y1!=Sin((winkel!/1000)/180.0*pi())*0.2
        x1!=Cos((winkel!/1000)/180.0*pi())*0.2
        dx!=dx!+x1!
        dy!=dy!+y1!

    endif

    if isKey(81)

        winkel!=winkel!-500
        startpaint bpic1&
        drawhPicRotated(bpic&,hDC,32,32,128,128,winkel!,30)
        endpaint

    endif

    if isKey(69)

        winkel!=winkel!+500
        startpaint bpic1&
        drawhPicRotated(bpic&,hDC,32,32,128,128,winkel!,30)
        endpaint

    endif

    startpaint vordergrpic&
    drawpic hintergrpic&,0,0;0
    drawpic bpic1&,100+dx!,100+dy!;-1
    endpaint
    drawpic vordergrpic&,10,10;0

ENDWHILE

end

nProc getCircP(long r,w)

    volver long(sin(0.0174532925199433*float(w)/1000.0)*float(r))

ENDPROC

nProc angleByLine(long x,y,xx,yy)

    sub y,yy
    sub x,xx

    if x

        xx=int(57295.77951 * arctan(float(y)/float(x)))
        caso x>0 : volver 270000 + xx
        volver 90000 + xx

    endif

    caso y<0 : volver 180000
    volver 0

ENDPROC

nProc drawhPicRotated(long hPic,dc,x,y,xx,yy,w,r)

    long hDCBits=createCompatibleDC(hDC)
    selectObject(hDCBits, hPic)
    long pts=dim(24)
    long 	w1=angleByLine(xx,yy,0,0),w2=abs(w1-360000),w3=abs(w1-540000)
    casenot r : r=long(sqrt(float(xx*xx+yy*yy)))\2
    long pts&,0=x+getcircp(r,w1+w),y+getcircp(r,w1-90000+w),x+getcircp(r,w2+w),y+getcircp(r,w2-90000+w),x+getcircp(r,w3+w),y+getcircp(r,w3-90000+w)
    plgBlt(dc,pts,hDCBits,0,0,xx,yy,0,0,0)
    deleteDC(hDCBits)
    disponer(pts)

ENDPROC


49 kB
Hochgeladen:10.04.2012
Ladeanzahl192
Descargar
 
10.04.2012  
 



Hi!

funkheld (10.04.12)
Jup, lo klappt wunderbar esta Nativo nProc drawhPicRotated(long hPic,dc,x,y,xx,yy,w,r) con XPSE el du erstellst hast.


Sí, danke!

funkheld (10.04.12)
In wieweit voluntad unten el Routinen vom XPSE beschleunigt?


¿Te ha dies hier (  [...]  ) ?

"NProc-Características voluntad en Ensamblador umgewandelt, en Hooks, Subclassing,

Hilos, Callbacks y all el Dinge a programa, en denen lo en

Threadsicherheit y hohe Geschwindigkeit ankommt."

Zudem voluntad el Funktionsaufrufe de XPSE en direkte Calls konvertiert -

esta Funktionsaufrufe son imho el schnellsten überhaupt.

funkheld (10.04.12)
¿Cómo se puede uno con el Rutina nProc drawhPicRotated una Drehung hacer en una verlegten Rotate-XY-Punkt? Jetzt dreht lo sí siempre en el Mittelpunkt.


Dies es bewusst no el Tarea dieser Función como ellos sonst en algunos

Operationen größer (y así auch weniger rápidamente) sería, el wiederum

no siempre verwendet würden. Deshalb dreht esta Función siempre genau en

el Mittelpunkt. Dadurch wiederum aber sólo puede ser el Punkt en el

gedreht voluntad se incluso bestimmen z.B. encima 2 Wege:

a) el Bild igual así invertir el el Drehpunkt el richtige es z.B. por

Platzlassen o. Randhinzufügen

b) el Ausgabeposition (3. y 4. Parámetro (x,y)) incluso bestimmen y versetzen

z.B. con el Función getCircP.

funkheld (10.04.12)
Mit el Variables "r" en el nProc Yo ahora el grösse eingestellt vom Sprite. Aber me es todavía no klar, si algo con el Grössenveränderung a tun ha? So bastante habe el Zusammenhang dazu no verstanden.


Usted puede así el Radius o. el Ausgabegröße des gedrehten Bildes

bestimmen y así Es el Función quasi auch igual drawhPicRotatedAndSized.

Si usted valor 0 übergibst entonces ermittelt el Función el Ausgabegröße

el para dieses Bild normal wäre o. el "Originalgröße".
 
10.04.2012  
 



Mach doch más así:
'URL: https://XProfan.com/intl/de/forum/hallo-if-drehung-uno-grafik-con-xpse-no-en-el-screen-native-nproc/#n
 {$cleq}
 {$compiler c:\XProfan11\}
 {$runtime c:\XProfan11\}
declarar bpic&, ende&,winkel!,hintergrpic&,vordergrpic&
declarar x1!,y1!,dx!,dy!,spd!
ende&=1
bpic& = create("HPIC",-1,"data\\auto.bmp")
Ventana 20,20-800,600
Cls RGB(220,220,220)
hintergrpic& = create("hNewPic", 500,500,rgb(255,255,0))
vordergrpic& = create("hNewPic", 500,500,rgb(255,255,0))
startpaint hintergrpic&
usebrush 1,rgb(0,128,255)
ellipse 200,200-250,250
endpaint
dx!=100
dy!=100
spd!=1

WHILE ende&

    sleep 16

    if isKey(38)

        spd!=spd!+0.1

    endif

    if isKey(40)

        spd!=spd!-0.1

    endif

    if isKey(37)

        winkel!=winkel!-5000

    endif

    if isKey(39)

        winkel!=winkel!+5000

    endif

    y1!=Sin((winkel!/1000)/180.0*pi())*spd!
    x1!=Cos((winkel!/1000)/180.0*pi())*spd!
    dx!=dx!-x1!
    dy!=dy!-y1!
    startpaint vordergrpic&
    drawpic hintergrpic&,0,0;0
    drawhPicRotatedTransparent(bpic&,hDC,int(dx!)-getCircP(15,int(winkel!)+90000),int(dy!)+getCircP(15,int(-winkel!)),128,128,winkel!,30,0)
    endpaint
    drawpic vordergrpic&,10,10;0

ENDWHILE

end

nProc getCircP(long r,w)

    volver long(sin(0.0174532925199433*float(w)/1000.0)*float(r))

ENDPROC

nProc angleByLine(long x,y,xx,yy)

    sub y,yy
    sub x,xx

    if x

        xx=int(57295.77951 * arctan(float(y)/float(x)))
        caso x>0 : volver 270000 + xx
        volver 90000 + xx

    endif

    caso y<0 : volver 180000
    volver 0

ENDPROC

nProc drawhPicRotated(long hPic,dc,x,y,xx,yy,w,r)

    long hDCBits=createCompatibleDC(hDC)
    selectObject(hDCBits, hPic)
    long pts=dim(24)
    long 	w1=angleByLine(xx,yy,0,0),w2=abs(w1-360000),w3=abs(w1-540000)
    casenot r : r=long(sqrt(float(xx*xx+yy*yy)))\2
    long pts&,0=x+getcircp(r,w1+w),y+getcircp(r,w1-90000+w),x+getcircp(r,w2+w),y+getcircp(r,w2-90000+w),x+getcircp(r,w3+w),y+getcircp(r,w3-90000+w)
    plgBlt(dc,pts,hDCBits,0,0,xx,yy,0,0,0)
    deleteDC(hDCBits)
    disponer(pts)

ENDPROC

nProc drawhPicRotatedTransparent(long hPic,dc,x,y,xx,yy,w,r,col){

    long hDCBits=createCompatibleDC(hDC)
    selectObject(hDCBits, hPic)
    long pts=dim(24)
    long 	w1=angleByLine(xx,yy,0,0),\
    w2=abs(w1-360000),\
    w3=abs(w1-540000)
    casenot r : r=long(sqrt(float(xx*xx+yy*yy)))\2
    long r2=r*2
    long pts&,0=	r+getcircp(r,w1+w),r+getcircp(r,w1-90000+w),\
    r+getcircp(r,w2+w),r+getcircp(r,w2-90000+w),\
    r+getcircp(r,w3+w),r+getcircp(r,w3-90000+w)
    long mDC=CreateCompatibleDC(hDC)
    long memBM=CreateCompatibleBitmap(hDC,r2,r2)
    long oldSel=Seleccionar objeto(mDC,memBM)
    plgBlt(mDC,pts,hDCBits,0,0,xx,yy,0,0,0)
    selectobject(dc,memBM)
    transparentBlt(dc,x-r,y-r,r2,r2,mDC,0,0,r2,r2,col)
    selectObject(mDC,oldSel)
    deleteObject(memBM)
    deleteDC(mDC)
    deleteDC(hDCBits)
    disponer(pts)

}

 
10.04.2012  
 




funkheld
Jup, danke para dein Vorschlag. Klappt vorzüglich.

Gruss
 
10.04.2012  
 



El Lenkung tal vez ansatzweise así:
'URL: https://XProfan.com/intl/de/forum/hallo-if-drehung-uno-grafik-con-xpse-no-en-el-screen-native-nproc/#n
 {$cleq}
 {$compiler c:\XProfan11\}
 {$runtime c:\XProfan11\}
declarar bpic&, ende&,winkel!,hintergrpic&,vordergrpic&
declarar x1!,y1!,dx!,dy!,spd!,steerspd!
ende&=1
bpic& = create("HPIC",-1,"data\\auto.bmp")
Ventana 20,20-800,600
Cls RGB(220,220,220)
hintergrpic& = create("hNewPic", 500,500,rgb(255,255,0))
vordergrpic& = create("hNewPic", 500,500,rgb(255,255,0))
startpaint hintergrpic&
usebrush 1,rgb(0,128,255)
ellipse 200,200-250,250
endpaint
dx!=100
dy!=100
spd!=1
steerspd!=0
winkel!=180000

WHILE ende&

    sleep 16

    if isKey(38)

        spd!=spd!+0.1

    endif

    if isKey(40)

        spd!=spd!-0.1

    endif

    if isKey(37)

        steerspd!=steerspd!-0.1
        caso steerspd!<-2 : steerspd!=-2

    endif

    if isKey(39)

        steerspd!=steerspd!+0.1
        caso steerspd!>2 : steerspd!=2

    endif

    winkel!=winkel!+steerspd!*spd!*450
    steerspd!=steerspd!*0.95
    y1!=Sin((winkel!/1000)/180.0*pi())*spd!
    x1!=Cos((winkel!/1000)/180.0*pi())*spd!
    dx!=dx!-x1!
    dy!=dy!-y1!
    startpaint vordergrpic&
    drawpic hintergrpic&,0,0;0
    drawhPicRotatedTransparent(bpic&,hDC,int(dx!)-getCircP(15,int(winkel!)+90000),int(dy!)+getCircP(15,int(-winkel!)),128,128,winkel!,30,0)
    endpaint
    drawpic vordergrpic&,10,10;0

ENDWHILE

end

nProc getCircP(long r,w)

    volver long(sin(0.0174532925199433*float(w)/1000.0)*float(r))

ENDPROC

nProc angleByLine(long x,y,xx,yy)

    sub y,yy
    sub x,xx

    if x

        xx=int(57295.77951 * arctan(float(y)/float(x)))
        caso x>0 : volver 270000 + xx
        volver 90000 + xx

    endif

    caso y<0 : volver 180000
    volver 0

ENDPROC

nProc drawhPicRotated(long hPic,dc,x,y,xx,yy,w,r)

    long hDCBits=createCompatibleDC(hDC)
    selectObject(hDCBits, hPic)
    long pts=dim(24)
    long 	w1=angleByLine(xx,yy,0,0),w2=abs(w1-360000),w3=abs(w1-540000)
    casenot r : r=long(sqrt(float(xx*xx+yy*yy)))\2
    long pts&,0=x+getcircp(r,w1+w),y+getcircp(r,w1-90000+w),x+getcircp(r,w2+w),y+getcircp(r,w2-90000+w),x+getcircp(r,w3+w),y+getcircp(r,w3-90000+w)
    plgBlt(dc,pts,hDCBits,0,0,xx,yy,0,0,0)
    deleteDC(hDCBits)
    disponer(pts)

ENDPROC

nProc drawhPicRotatedTransparent(long hPic,dc,x,y,xx,yy,w,r,col){

    long hDCBits=createCompatibleDC(hDC)
    selectObject(hDCBits, hPic)
    long pts=dim(24)
    long 	w1=angleByLine(xx,yy,0,0),\
    w2=abs(w1-360000),\
    w3=abs(w1-540000)
    casenot r : r=long(sqrt(float(xx*xx+yy*yy)))\2
    long r2=r*2
    long pts&,0=	r+getcircp(r,w1+w),r+getcircp(r,w1-90000+w),\
    r+getcircp(r,w2+w),r+getcircp(r,w2-90000+w),\
    r+getcircp(r,w3+w),r+getcircp(r,w3-90000+w)
    long mDC=CreateCompatibleDC(hDC)
    long memBM=CreateCompatibleBitmap(hDC,r2,r2)
    long oldSel=Seleccionar objeto(mDC,memBM)
    plgBlt(mDC,pts,hDCBits,0,0,xx,yy,0,0,0)
    selectobject(dc,memBM)
    transparentBlt(dc,x-r,y-r,r2,r2,mDC,0,0,r2,r2,col)
    selectObject(mDC,oldSel)
    deleteObject(memBM)
    deleteDC(mDC)
    deleteDC(hDCBits)
    disponer(pts)

}


Fliehkraft fehlt como aber auch todavía.
 
10.04.2012  
 




funkheld
Jup, el schaut bien de y sin viel Aufwand, sólo deinen nativen Proceduren.
In el Bewegung sieht uno el Mächtigkeit el Proceduren...

Gracias.

Gruss
 
10.04.2012  
 



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

10.493 Views

Untitledvor 0 min.
Thomas Freier16.02.2024
funkheld21.04.2023
Jochen Roxlau29.11.2018
Langer08.10.2018
Más...

Themeninformationen

Dieses Thema ha 2 subscriber:

funkheld (5x)
iF (4x)


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