Français
Forum

allô IF, Drehung einer Grafik avec XPSE pas sur den Screen...Native nProc..

 

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

 
07.04.2012  
 



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

 
09.04.2012  
 




funkheld
Jup, merci. c'est super.

Gruss
 
09.04.2012  
 




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


49 kB
Hochgeladen:10.04.2012
Downloadcounter206
Download
 
10.04.2012  
 



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".
 
10.04.2012  
 



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)

}

 
10.04.2012  
 




funkheld
Jup, merci pour dein Vorschlag. Klappt vorzüglich.

Gruss
 
10.04.2012  
 



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.
 
10.04.2012  
 




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
 
10.04.2012  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

10.872 Views

Untitledvor 0 min.
Thomas Freier16.02.2024
funkheld21.04.2023
Jochen Roxlau29.11.2018
Langer08.10.2018
plus...

Themeninformationen

cet Thema hat 2 participant:

funkheld (5x)
iF (4x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie