Image-Angriffspunkt

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

joachim_neu

Betreff: Image-Angriffspunkt

BeitragSa, Apr 09, 2005 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,

ich hab ein problem. wenn ich bei einem bild den angriffspunkt setze, und das dann rotate, dann wird der ja nicht mitgedreht, sprich der angriffspunkt bleibt dann der gleiche. schwierig ist das vorallem, wenn ich z.B. einen hammer mit rotatepunkt 1,1 hab. nach dem drehen um -45 ° ist der angriffspunkt dann aber nichtmehr auf der stelle am hammer, wo er davor war, sondern immernoch oben in der ecke.
wie schafft man es, dass der rotatepunkt da is, wo man ihn haben will, außer in der mitte? danke für hilfe.

J!N
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de
 

noir

BeitragSa, Apr 09, 2005 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
meinst du sowas wie:

MIDHANDLE
AUTOMIDHANDLE
HANDLEIMAGE

?
Fragt und man wird euch helfen

Das Alternativ BlitzBasic-Forum: FreeCoder
Einfach chatten: BlitzChat
Code&Text schnell und einfach pasten: FreePasting

joachim_neu

BeitragSa, Apr 09, 2005 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
die befehle kenn ich, nur wie finde ich den punkt wieder, an dem ich vorher gedreht habe? ich kenn ja nur die alten X und Y werte + die alte größe + die neue größe. ich suche aber die neuen X und Y werte, die den gleichen punkt angeben (nach dem drehen)
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de
 

hitokiri

BeitragSo, Apr 10, 2005 2:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du automidhandle hast und dann rotatest wird er doch um den punkt 0,0 gedreht, also ist der punkt 0,0 nach dem rotaten derselbe wie vorher o.O.

ansonsten eben über sinus/cosinus ausrechnen

joachim_neu

BeitragSo, Apr 10, 2005 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
jo, aber wenn der punkt nicht 0,0 ist? wie berechnen?
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de
 

hitokiri

BeitragSo, Apr 10, 2005 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
du hast den winkel und du kennst ja auch die länge und breite, also die anfangsentfernung von rotatepunkt und angriffspunkt.
*kopfkratz*
wenn du als rotatepunkt 1,1 hast und als angriffspunkt 0,0 und dann um 45 grad wanderst...
dann ziehst du um 1,1 einen kreis mit radius 1. bei 45° deutet dir dein radius genau auf den angriffspunkt.
glaube ich zumindest, wenn ich dein problem richtig verstanden habe

joachim_neu

BeitragSo, Apr 10, 2005 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, blos wie mache ich in BB einen kreis? ich will ja das nicht konstruieren, sondern ausrechnen, und bin in der 8. klasse, also mit diesem cos, sin und sonstwas hab ich noch nix zu tun, ich weiß nur, dass man das da scheinbar braucht...

EDIT: naja, also ich hab jetzt mal überlegt, und herausgekommen ist, dass ich ja neben dem bezugspunkt dann auch den angriffspunkt beim zeichnen der figur neu berechnen muss, den bezugspunkt für die nächste drehung und den zeichenpunkt, um das so zu zeichnen, dass es aussieht, als hätte es sich tatsächlich um den punkt gedreht und nicht um den mittelpunkt...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

Alfadur

BeitragMo, Apr 11, 2005 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
watch dis man!!!

BlitzBasic: [AUSKLAPPEN]

x= (TILEWIDTH/2-angriffspunkt\x) * Cos(rotatewinkel) - (TILEHEIGHT/2+angriffspunkt\y) * Sin(rotatewinkel)
y= (TILEWIDTH/2-angriffspunkt\x) * Sin(rotatewinkel) + (TILEHEIGHT/2+angriffspunkt\y) * Cos(rotatewinkel)
A Cray is the only computer that runs an endless loop in less than four hours.

joachim_neu

BeitragSo, Apr 24, 2005 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
@Alfadur:

Danke für die Formel, nur irgendwie gehts immernoch net...

das hier ist meine funktion:

BlitzBasic: [AUSKLAPPEN]

;dimfeld objekts(id,x):
;in y steht die nummer des objektes.
;in x sind diese werte
;00 bild
;01 startX
;02 startY
;03 stopX
;04 stopY
;05 speed
;06 nameid
;07 X
;08 Y
;09 rotatepointX
;10 rotatepointY
;11 drawpointX
;12 drawpointY
;13 punkteunterschiedX
;14 punkteunterschiedY

;dreht ein objekt
Function rotate()
;IRRELEVANT
;das ist alles von einem scriptprogramm, und dies sind die parameterchecks
If token_number > 2 Then error(\"Zu viele Parameter angegeben!\",\"F:ROTATE\")
If token_number < 2 Then error(\"Zu wenige Parameter angegeben!\",\"F:ROTATE\")
id = getNameID(token_1$)
winkel = token_2$
;hier werden die tokens übergeben
If id = -1 Then error(\"NameID nicht vorhanden!\",\"F:ROTATE\")
;hier wird geschaut, ob das objekt existiert
;/IRRELEVANT
HandleImage objekts(id,0),objekts(id,9),objekts(id,10)
TILEHEIGHT = ImageHeight(objekts(id,0))
TILEWIDTH = ImageWidth(objekts(id,0))
RotateImage objekts(id,0),token_2$

x1 = (TILEWIDTH/2-objekts(id,9)) * Cos(winkel) - (TILEHEIGHT/2+objekts(id,10)) * Sin(winkel)
y1 = (TILEWIDTH/2-objekts(id,9)) * Sin(winkel) + (TILEHEIGHT/2+objekts(id,10)) * Cos(winkel)

objekts(id,9) = x1
objekts(id,10) = y1

HandleImage objekts(id,0),x1,y1
objekts(id,11) = objekts(id,9) - objekts(id,13)
objekts(id,12) = objekts(id,10) - objekts(id,14)

;IRRELEVANT
;ab hier sind nur logzwecke!
report(\"Objekt gedreht:\",\"F:ROTATE\")
report(\"ID : \" + id,\"F:ROTATE\")
report(\"NameID : \" + token_1$,\"F:ROTATE\")
report(\"Winkel : \" + token_2$,\"F:ROTATE\")
report(\"X ungedreht : \" + unrX,\"F:ROTATE\")
report(\"Y ungedreht : \" + unrY,\"F:ROTATE\")
report(\"X gedreht : \" + ImageWidth(objekts(id,0)),\"F:ROTATE\")
report(\"Y gedreht : \" + ImageHeight(objekts(id,0)),\"F:ROTATE\")
.rotate_end
;/IRRELEVANT
End Function


vielen Dank für hilfe...

J!N
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

Alfadur

BeitragSo, Apr 24, 2005 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaub du machst viel zu viel. wie du die formel benutzt ist so wie ich das sehe schon richtig... aber die position des rotatepunktes ist dann bei objekt\x+tx und objekt\y+ty mache ...

bzw in deinem fall bei objekt(id,7)+x1 und objekt(id,8)+y1

also in deinem fall brauchst du den rotatepunkt garnicht speichern ,den berechnest du ja immer neu mit der formel ...

auch das viele handleimage solltest du vielleicht lassen... obwohl ich jetzt bei dem code auch gerade garnicht mehr durchblicke. willst du ein ganzes bild rotieren oder nur einen entsprechenden punkt?
A Cray is the only computer that runs an endless loop in less than four hours.

joachim_neu

BeitragSo, Apr 24, 2005 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
das bild um den punkt will ich rotieren...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

Alfadur

BeitragSo, Apr 24, 2005 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, angenommen du hast ein bild, das ist 32x32 groß ... du hast es natürlich gemidhandled...

und angenommen der angriffspunkt, also der punkt den du rotieren willst, der liegt bei (22,4) ...

rotatex= (32/2-22) * Cos(rotatewinkel) - (32/2+4) * Sin(rotatewinkel)
rotatey= (32/2-22) * Sin(rotatewinkel) + (32/2+4) * Cos(rotatewinkel)

wenn du jetzt dein gedrehtes bild hast, welches du wohl ungefähr mit
drawimage bild(winkel),x,y,frame einzeichnest, dann befindet sich der angriffspunkt bei x+rotatex und y+rotatey....
midhandle mußt du am anfang machen, oder einmal automidhandle 1
A Cray is the only computer that runs an endless loop in less than four hours.

joachim_neu

BeitragMo, Apr 25, 2005 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
habs net gemidhandled...
ich hab ein bild, 50x50 und will das um den punkt 15,15 drehen. und damit das realistisch aussieht muss ich diesen punkt nach dem drehen wieder finden und noch dazu daran den malpunkt ausrichten, dann sieht es aus, als währe es um eben diesen punkt auf dem bildschirm gedreht worden...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

Alfadur

BeitragMo, Apr 25, 2005 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich hab mir gerade ein bild gemalt, das ist 50x50 groß und hat bei 15,15 nen punkt. darum solls rotiert werden. da hab ich einfach mal

BlitzBasic: [AUSKLAPPEN]

Graphics 800,600
SetBuffer BackBuffer()
TFormFilter 0

Dim imgwinkel(359)

img=LoadImage(\"50x50.png\"):MaskImage img,255,0,255:HandleImage img,15,15

For i=0 To 359
imgwinkel(i)=CopyImage(img)
RotateImage imgwinkel(i),i
MaskImage imgwinkel(i),255,0,255
Next

winkel=0

While Not KeyHit(1)

Cls
DrawImage imgwinkel(winkel),400,300

If KeyDown(203) Then winkel=winkel-1
If KeyDown(205) Then winkel=winkel+1
winkel=(winkel+360) Mod 360
Text 10,10,\"Winkel : \"+winkel

Flip 0
Wend


geschrieben und schon funktionierts. also zumindest ist das bild da, der punkt ist da und das bild rotiert drum herum! was jetzt der malpunkt ist, das weiß ich immernoch nicht. wenn du das handle vom bild verschiebst, dann wird das bild ja an den punkt gezeichnet... willst du jetzt etwa wieder den mittelpunkt des bildes berechnen oder wie? probier mal den code oben aus, der macht ja eigentlich genau das was du willst ...
A Cray is the only computer that runs an endless loop in less than four hours.

joachim_neu

BeitragDi, Apr 26, 2005 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
jo, der code macht, was ich haben will...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

Alfadur

BeitragDi, Apr 26, 2005 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
na dann... mit bißchen mehr und präzisem info hätte es keine 17 tage gedauert...
A Cray is the only computer that runs an endless loop in less than four hours.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group