Foro | | | | 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
|
| | | | |
| | | 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
|
| | | | |
| | funkheld | Jup, danke. Es Klasse.
Gruss |
| | | | |
| | 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
|
| | | | |
| | | 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". |
| | | | |
| | | 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)
}
|
| | | | |
| | funkheld | Jup, danke para dein Vorschlag. Klappt vorzüglich.
Gruss |
| | | | |
| | | 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. |
| | | | |
| | 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 |
| | | | |
|
RespuestaTema opciones | 10.493 Views |
ThemeninformationenDieses Thema ha 2 subscriber: |