Hoi allemaal,
ik ben bezig met een project waarin een aantal objecten op een veld gesleept kunnen worden, waarna het mogelijk moet zijn om deze objecten te scalen, roteren, ... met behulp van de muis. Hierbij wordt de linksboven hoek gebruikt als handle voor het roteren, en rechtsonder is de handle voor het schalen.
Het roteren werkt ondertussen zoals het hoort, maar het scalen is een andere zaak.
Mijn eerste poging was om het verschil tussen de vorige en de huidige muiscoördinaten te nemen en die bij de hoogte en breedte van mijn object op te tellen. Dit werkt goed, zolang het object niet geroteerd is natuurlijk.
Mijn tweede poging was om het verschil in afstand tot het middelpunt van het object te nemen, en dat dan bij de breedte en hoogte op te tellen, maar dit lijkt ook niet zo goed te werken
Het probleem hiermee is dat de mate van vergroting in de eerste plaats niet klopt (lijkt het dubbel te zijn van wat zou moeten), en wanneer het object erg klein gemaakt wordt, beginnen de afmetingen heel rare waarden aan te nemen.
Nu heb ik uiteraard al gegoogled tot ik er bij wijze van spreken bij neerviel, maar veel nuttings heb ik niet gevonden. Dat kan natuurlijk ook wel aan mijn google-skills liggen
Hopelijk kan hier iemand me wat verder op weg helpen, want op deze manier is het voorlopig wel werkbaar, maar zo mag het natuurlijk niet blijven...
Alvast bedankt aan iedereen die de moeite doet om hier samen met mij zijn hoofd over te breken (of om mij op een ontzettend stomme fout te wijzen?)
ik ben bezig met een project waarin een aantal objecten op een veld gesleept kunnen worden, waarna het mogelijk moet zijn om deze objecten te scalen, roteren, ... met behulp van de muis. Hierbij wordt de linksboven hoek gebruikt als handle voor het roteren, en rechtsonder is de handle voor het schalen.
Het roteren werkt ondertussen zoals het hoort, maar het scalen is een andere zaak.
Mijn eerste poging was om het verschil tussen de vorige en de huidige muiscoördinaten te nemen en die bij de hoogte en breedte van mijn object op te tellen. Dit werkt goed, zolang het object niet geroteerd is natuurlijk.
Mijn tweede poging was om het verschil in afstand tot het middelpunt van het object te nemen, en dat dan bij de breedte en hoogte op te tellen, maar dit lijkt ook niet zo goed te werken
Flash ActionScript: ArtCanvas.as
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
| private function handleObjectResize(event:MouseEvent):void { event.stopImmediatePropagation(); var ratio:Number = currentObject.width / currentObject.height; var globalCentre:Point = currentObject.localToGlobal(new Point(currentObject.width/2, currentObject.height/2)); var currentPoint:Point = new Point(event.stageX, event.stageY); var distanceStartX:Number = startPoint.x - globalCentre.x; var distanceStartY:Number = startPoint.y - globalCentre.y; var distanceCurrentX:Number = currentPoint.x - globalCentre.x; var distanceCurrentY:Number = currentPoint.y - globalCentre.y; var distanceStart:Number = Math.sqrt(Math.pow(distanceStartX, 2) + Math.pow(distanceStartY, 2)); var d:Number = 1; if (distanceStart > distanceCurrent) d *= -1; var distanceCurrent:Number = Math.sqrt(Math.pow(distanceCurrentX, 2) + Math.pow(distanceCurrentY, 2)); var distanceDifference:Number = distanceCurrent - distanceStart; currentObject.width += (distanceDifference * d); currentObject.height += (distanceDifference * ratio *d); startPoint = new Point(event.stageX, event.stageY); } |
Het probleem hiermee is dat de mate van vergroting in de eerste plaats niet klopt (lijkt het dubbel te zijn van wat zou moeten), en wanneer het object erg klein gemaakt wordt, beginnen de afmetingen heel rare waarden aan te nemen.
Nu heb ik uiteraard al gegoogled tot ik er bij wijze van spreken bij neerviel, maar veel nuttings heb ik niet gevonden. Dat kan natuurlijk ook wel aan mijn google-skills liggen
Hopelijk kan hier iemand me wat verder op weg helpen, want op deze manier is het voorlopig wel werkbaar, maar zo mag het natuurlijk niet blijven...
Alvast bedankt aan iedereen die de moeite doet om hier samen met mij zijn hoofd over te breken (of om mij op een ontzettend stomme fout te wijzen?)