Forum | | | |  funkheld | allô, Frohe Pâques. il me faut s'il te plaît einmal Aider pour qui Drehung einer Grafik.
je voudrais qui gedrehte Grafik ici rein apporter: bpic1& = create("hNewPic", 128,128,rgb(0,0,0)) et pas sur den Bildschirm .
comment allez cela ?
merci.
Gruss
declare bpic&,ende&,hWin&,winkel&,hDCWin&
ende&=1
bpic& = create(«PCSI»,-1,"auto.bmp")
Fenêtre 20,20-400,400
Cls RGB(220,220,220)
hWin& = @Créer("text", %hWnd, », 10,10, 300,300)
hDCWin& = ~GetDC(hWin&)
WHILE ende&
si isKey(81)
winkel&=winkel&-100
cls
drawhPicRotated(bpic&,hDCWin&,100,100,128,128,winkel&,50)
endif
si isKey(69)
winkel&=winkel&+100
cls
drawhPicRotated(bpic&,hDCWin&,100,100,128,128,winkel&,50)
endif
ENDWHILE
end
nProc getCircP(long r,w)
return long(sin(0.0174532925199433*float(w)/1000.0)*float(r))
endproc
nProc angleByLine(long x,y,xx,yy)
sub y,yy
sub x,xx
si x
xx=int(57295.77951 * arctan(float(y)/float(x)))
cas x>0 : return 270000 + xx
return 90000 + xx
endif
cas y<0 : return 180000
return 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)
dispose(pts)
endproc
|
| | | | |
| |  | si on une Trick utilise cela %hDC pour Début de peinture sur un hPic den DC des "hPics" zurückgibt ensuite so:
{$cleq}
{$compiler c:\XProfan11\}
{$runtime c:\XProfan11\}
declare bpic&,ende&,winkel&
ende&=1
bpic& = create(«PCSI»,-1,"c:\\voiture.bmp")
Fenêtre 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)
return long(sin(0.0174532925199433*float(w)/1000.0)*float(r))
endproc
nProc angleByLine(long x,y,xx,yy)
sub y,yy
sub x,xx
si x
xx=int(57295.77951 * arctan(float(y)/float(x)))
cas x>0 : return 270000 + xx
return 90000 + xx
endif
cas y<0 : return 180000
return 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)
dispose(pts)
endproc
|
| | | | |
| |  funkheld | Jup, merci. c'est super.
Gruss |
| | | | |
| |  funkheld | Jup, es klappt wunderbar cet Native nProc drawhPicRotated(long hPic,dc,x,y,xx,yy,w,r) avec XPSE qui du erstellst la hâte.
avec den Tasten Q/E peux on un Sprite rotieren et den Tasten W/S peux on es bewegen.
dans wieweit volonté unten qui Routinen vom XPSE beschleunigt?
comment peux on avec qui Routine nProc drawhPicRotated une Drehung faire um une verlegten Rotate-XY-Punkt? maintenant dreht es sich oui toujours um den Mittelpunkt.
avec qui Variablen "r" dans qui nProc habe je maintenant qui grösse eingestellt vom Sprite. mais mir ist encore pas bien sûr, si es quelque chose avec qui Grössenveränderung trop 1faire hat? So entier habe den Zusammenhang en supplément pas verstanden.
merci.
Gruss
{$cleq}
{$compiler d:\XProfan11\}
{$runtime d:\XProfan11\}
declare bpic&, bpic1&,ende&,winkel!,hintergrpic&,vordergrpic&
declare x1!,y1!,dx!,dy!
ende&=1
bpic& = create(«PCSI»,-1,"data\\voiture.bmp")
Fenêtre 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&
si 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
si 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
si isKey(81)
winkel!=winkel!-500
startpaint bpic1&
drawhPicRotated(bpic&,hDC,32,32,128,128,winkel!,30)
endpaint
endif
si 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)
return long(sin(0.0174532925199433*float(w)/1000.0)*float(r))
endproc
nProc angleByLine(long x,y,xx,yy)
sub y,yy
sub x,xx
si x
xx=int(57295.77951 * arctan(float(y)/float(x)))
cas x>0 : return 270000 + xx
return 90000 + xx
endif
cas y<0 : return 180000
return 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)
dispose(pts)
endproc
|
 | | | | |
| |  | Hi!
funkheld (10.04.12)
Jup, es klappt wunderbar cet Native nProc drawhPicRotated(long hPic,dc,x,y,xx,yy,w,r) avec XPSE qui du erstellst la hâte.
oui, merci!
funkheld (10.04.12)
dans wieweit volonté unten qui Routinen vom XPSE beschleunigt?
Avez- Du ca ici ( [...] ) ?
"NProc-Funktionen volonté dans Assembler umgewandelt, um Hooks, Subclassing,
Threads, Callbacks et espace qui Dinge trop programmieren, chez denen es sur
Threadsicherheit et hohe Geschwindigkeit ankommt."
Zudem volonté qui Funktionsaufrufe de XPSE dans directe Calls konvertiert -
cet Funktionsaufrufe sommes imho qui schnellsten überhaupt.
funkheld (10.04.12)
comment peux on avec qui Routine nProc drawhPicRotated une Drehung faire um une verlegten Rotate-XY-Punkt? maintenant dreht es sich oui toujours um den Mittelpunkt.
ca ist bewusst pas qui devoir cette Funktion là vous sonst um quelques
Operationen größer (et avec cela aussi moins vite) serait, qui wiederum
pas toujours verwendet würden. c'est pourquoi dreht cet Funktion toujours oui c'est ca um
den Mittelpunkt. Dadurch wiederum mais seulement peux on den Punkt um den
gedreht volonté soll selbst bestimmen z.B. sur 2 Wege:
a) cela Bild juste so anlegen cela qui Drehpunkt qui richtige ist z.B. par
Platzlassen bzw. Randhinzufügen
b) qui Ausgabeposition (3. et 4. paramètre (x,y)) selbst bestimmen et versetzen
z.B. avec qui Funktion getCircP.
funkheld (10.04.12)
avec qui Variablen "r" dans qui nProc habe je maintenant qui grösse eingestellt vom Sprite. mais mir ist encore pas bien sûr, si es quelque chose avec qui Grössenveränderung trop 1faire hat? So entier habe den Zusammenhang en supplément pas verstanden.
tu peux avec cela den Radius bzw. qui Ausgabegröße des gedrehten Bildes
bestimmen et avec cela ist qui Funktion quasi aussi juste drawhPicRotatedAndSized.
si Du la valeur 0 übergibst ensuite ermittelt qui Funktion qui Ausgabegröße
qui pour cet Bild normal wäre bzw. qui "Originalgröße". |
| | | | |
| |  | Mach doch plutôt so:
'URL: https://XProfan.com/intl/de/forum/allô-si-drehung-einer-grafik-avec-xpse-pas-sur-den-screen-native-nproc/#n
{$cleq}
{$compiler c:\XProfan11\}
{$runtime c:\XProfan11\}
declare bpic&, ende&,winkel!,hintergrpic&,vordergrpic&
declare x1!,y1!,dx!,dy!,spd!
ende&=1
bpic& = create(«PCSI»,-1,"data\\voiture.bmp")
Fenêtre 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
si isKey(38)
spd!=spd!+0.1
endif
si isKey(40)
spd!=spd!-0.1
endif
si isKey(37)
winkel!=winkel!-5000
endif
si 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)
return long(sin(0.0174532925199433*float(w)/1000.0)*float(r))
endproc
nProc angleByLine(long x,y,xx,yy)
sub y,yy
sub x,xx
si x
xx=int(57295.77951 * arctan(float(y)/float(x)))
cas x>0 : return 270000 + xx
return 90000 + xx
endif
cas y<0 : return 180000
return 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)
dispose(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=SelectObject(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)
dispose(pts)
}
|
| | | | |
| |  funkheld | Jup, merci pour dein Vorschlag. Klappt vorzüglich.
Gruss |
| | | | |
| |  | qui Lenkung peut-être ansatzweise so:
'URL: https://XProfan.com/intl/de/forum/allô-si-drehung-einer-grafik-avec-xpse-pas-sur-den-screen-native-nproc/#n
{$cleq}
{$compiler c:\XProfan11\}
{$runtime c:\XProfan11\}
declare bpic&, ende&,winkel!,hintergrpic&,vordergrpic&
declare x1!,y1!,dx!,dy!,spd!,steerspd!
ende&=1
bpic& = create(«PCSI»,-1,"data\\voiture.bmp")
Fenêtre 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
si isKey(38)
spd!=spd!+0.1
endif
si isKey(40)
spd!=spd!-0.1
endif
si isKey(37)
steerspd!=steerspd!-0.1
cas steerspd!<-2 : steerspd!=-2
endif
si isKey(39)
steerspd!=steerspd!+0.1
cas 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)
return long(sin(0.0174532925199433*float(w)/1000.0)*float(r))
endproc
nProc angleByLine(long x,y,xx,yy)
sub y,yy
sub x,xx
si x
xx=int(57295.77951 * arctan(float(y)/float(x)))
cas x>0 : return 270000 + xx
return 90000 + xx
endif
cas y<0 : return 180000
return 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)
dispose(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=SelectObject(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)
dispose(pts)
}
Fliehkraft fehlt là mais aussi encore. |
| | | | |
| |  funkheld | Jup, cela schaut bien aus et sans viel Aufwand, seulement avec deinen nativen Proceduren. dans qui Bewegung sieht on qui Mächtigkeit qui Proceduren...
merci.
Gruss |
| | | | |
|
répondreOptions du sujet | 10.872 Views |
Themeninformationencet Thema hat 2 participant: |