chrsyl
asked on
Transfer of mobile action script package to mobile mxml code
Hi,
I put together a mobile action script that makes an arc. Then I tried to use this package in a mxml mobile code but did not succeed? Where am I failing?
Sincerely
chrsyl
mobile actionscript code:
package com {
import flash.display.DisplayObjec t;
import flash.display.Graphics;
import flash.display.Shape;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMo de;
public class Arc extends Sprite {
private var size:uint = 80;
private var bgColor:uint = 0xFFCC00;
private var borderColor:uint = 0x666666;
private var borderSize:uint = 0;
private var cornerRadius:uint = 9;
private var gutter:uint = 5;
public function Arc() {
super();
// support autoOrients
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
drawArc(90, 160, 50, 100, 30, 30 );
refreshLayout();
}
private function refreshLayout():void {
var ln:uint = numChildren;
var child:DisplayObject;
var lastChild:DisplayObject = getChildAt(0);
lastChild.x = gutter;
lastChild.y = gutter;
for (var i:uint = 1; i < ln; i++) {
child = getChildAt(i);
child.x = gutter + lastChild.x + lastChild.width;
child.y = gutter;
lastChild = child;
}}
public function drawArc(x : Number, y : Number, radius : Number, arc : Number, startAngle : Number, yRadius : Number ) : void {
var target:Shape = new Shape();
// if startAngle is undefined, startAngle = 0
if( startAngle == 0 ) {
startAngle = 0;
}
// if yRadius is undefined, yRadius = radius
if (yRadius == 0) {
yRadius = radius;
}
// Init vars
var segAngle : Number, theta : Number, angle : Number, angleMid : Number, segs : Number, ax : Number, ay : Number, bx : Number, by : Number, cx : Number, cy : Number;
// no sense in drawing more than is needed :)
if (abs( arc ) > 360) {
arc = 360;
}
// Flash uses 8 segments per circle, to match that, we draw in a maximum
// of 45 degree segments. First we calculate how many segments are needed
// for our arc.
segs = ceil( abs( arc ) / 45 );
// Now calculate the sweep of each segment
segAngle = arc / segs;
// The math requires radians rather than degrees. To convert from degrees
// use the formula (degrees/180)*Math.PI to get radians.
theta = -(segAngle / 180) * Math.PI;
// convert angle startAngle to radians
angle = -(startAngle / 180) * Math.PI;
// find our starting points (ax,ay) relative to the secified x,y
ax = x - Math.cos( angle ) * radius;
ay = y - Math.sin( angle ) * yRadius;
// if our arc is larger than 45 degrees, draw as 45 degree segments
// so that we match Flash's native circle routines.
target.graphics.lineStyle( 1, 0x990000, .75);
if (segs > 0) {
target.graphics.moveTo( x, y );
// Loop for drawing arc segments
for (var i : int = 0; i < segs; ++i) {
// increment our angle
angle += theta;
// find the angle halfway between the last angle and the new
angleMid = angle - (theta / 2);
// calculate our end point
bx = ax + Math.cos( angle ) * radius;
by = ay + Math.sin( angle ) * yRadius;
// calculate our control point
cx = ax + Math.cos( angleMid ) * (radius / Math.cos( theta / 2 ));
cy = ay + Math.sin( angleMid ) * (yRadius / Math.cos( theta / 2 ));
// draw the arc segment
target.graphics.curveTo( cx, cy, bx, by );
addChild(target);
}}}
private static function abs( value : Number ) : Number {
return value < 0 ? -value : value;
}
private static function ceil( value : Number) : Number {
return (value % 1) ? int( value ) + 1 : value;
}}}
mxml code:
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adob e.com/flex /spark" title="HomeView">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.Arc;
]]>
</fx:Script>
<s:VGroup width="100%" height="100%" horizontalAlign="left">
<s:Imgae source="{myArc}" />
</s:VGroup >
</s:View>
I put together a mobile action script that makes an arc. Then I tried to use this package in a mxml mobile code but did not succeed? Where am I failing?
Sincerely
chrsyl
mobile actionscript code:
package com {
import flash.display.DisplayObjec
import flash.display.Graphics;
import flash.display.Shape;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMo
public class Arc extends Sprite {
private var size:uint = 80;
private var bgColor:uint = 0xFFCC00;
private var borderColor:uint = 0x666666;
private var borderSize:uint = 0;
private var cornerRadius:uint = 9;
private var gutter:uint = 5;
public function Arc() {
super();
// support autoOrients
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
drawArc(90, 160, 50, 100, 30, 30 );
refreshLayout();
}
private function refreshLayout():void {
var ln:uint = numChildren;
var child:DisplayObject;
var lastChild:DisplayObject = getChildAt(0);
lastChild.x = gutter;
lastChild.y = gutter;
for (var i:uint = 1; i < ln; i++) {
child = getChildAt(i);
child.x = gutter + lastChild.x + lastChild.width;
child.y = gutter;
lastChild = child;
}}
public function drawArc(x : Number, y : Number, radius : Number, arc : Number, startAngle : Number, yRadius : Number ) : void {
var target:Shape = new Shape();
// if startAngle is undefined, startAngle = 0
if( startAngle == 0 ) {
startAngle = 0;
}
// if yRadius is undefined, yRadius = radius
if (yRadius == 0) {
yRadius = radius;
}
// Init vars
var segAngle : Number, theta : Number, angle : Number, angleMid : Number, segs : Number, ax : Number, ay : Number, bx : Number, by : Number, cx : Number, cy : Number;
// no sense in drawing more than is needed :)
if (abs( arc ) > 360) {
arc = 360;
}
// Flash uses 8 segments per circle, to match that, we draw in a maximum
// of 45 degree segments. First we calculate how many segments are needed
// for our arc.
segs = ceil( abs( arc ) / 45 );
// Now calculate the sweep of each segment
segAngle = arc / segs;
// The math requires radians rather than degrees. To convert from degrees
// use the formula (degrees/180)*Math.PI to get radians.
theta = -(segAngle / 180) * Math.PI;
// convert angle startAngle to radians
angle = -(startAngle / 180) * Math.PI;
// find our starting points (ax,ay) relative to the secified x,y
ax = x - Math.cos( angle ) * radius;
ay = y - Math.sin( angle ) * yRadius;
// if our arc is larger than 45 degrees, draw as 45 degree segments
// so that we match Flash's native circle routines.
target.graphics.lineStyle(
if (segs > 0) {
target.graphics.moveTo( x, y );
// Loop for drawing arc segments
for (var i : int = 0; i < segs; ++i) {
// increment our angle
angle += theta;
// find the angle halfway between the last angle and the new
angleMid = angle - (theta / 2);
// calculate our end point
bx = ax + Math.cos( angle ) * radius;
by = ay + Math.sin( angle ) * yRadius;
// calculate our control point
cx = ax + Math.cos( angleMid ) * (radius / Math.cos( theta / 2 ));
cy = ay + Math.sin( angleMid ) * (yRadius / Math.cos( theta / 2 ));
// draw the arc segment
target.graphics.curveTo( cx, cy, bx, by );
addChild(target);
}}}
private static function abs( value : Number ) : Number {
return value < 0 ? -value : value;
}
private static function ceil( value : Number) : Number {
return (value % 1) ? int( value ) + 1 : value;
}}}
mxml code:
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adob
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.Arc;
]]>
</fx:Script>
<s:VGroup width="100%" height="100%" horizontalAlign="left">
<s:Imgae source="{myArc}" />
</s:VGroup >
</s:View>
ASKER
Hi CyanBlue,
The action script produces an arc. But when implementing it in the mxml script no arc is produced as was expected. I think the problem is that the code in the mxml script is not appropriate to get the arc out of the action script. But I cannot solve it myself.
Sincerely¨chrsyl
The action script produces an arc. But when implementing it in the mxml script no arc is produced as was expected. I think the problem is that the code in the mxml script is not appropriate to get the arc out of the action script. But I cannot solve it myself.
Sincerely¨chrsyl
ASKER
I've requested that this question be deleted for the following reason:
1. Yes<br />2. Yes<br />3. Thank You!<br />
1. Yes<br />2. Yes<br />3. Thank You!<br />
I am not trying to waste other people's time, but I have to object because I don't understand his reason behind 'yes, yes, thank you' note and love to know what he really means.
People spend their own time to help others and those kinds of replies just throws me off. :(
CyanBlue
People spend their own time to help others and those kinds of replies just throws me off. :(
CyanBlue
ASKER
Sorry if I have caused any bad feelings. That was indeed not my intention.
I just answered the questions posed when the question was ready to be deleted:
1. Have you responded to all of the Experts' questions and provided feedback for any proposed solutions? If not, please click "Cancel" and do so. Give the Experts a chance to respond before requesting that your question be deleted.
Yes
Did you find your own solution? If you did, please click "Cancel", post your solution, and then close the question by clicking "Accept as Solution" on your own post.
Yes
Participating Experts are given an opportunity to object prior to your question being deleted. If no objections are posted after four days, your question will be deleted automatically.
Thank you. Of course I thank the expert as the dialogue fueled me to see the problem otherwise and find the solution. Once mre, thank you.
chrsyl
I just answered the questions posed when the question was ready to be deleted:
1. Have you responded to all of the Experts' questions and provided feedback for any proposed solutions? If not, please click "Cancel" and do so. Give the Experts a chance to respond before requesting that your question be deleted.
Yes
Did you find your own solution? If you did, please click "Cancel", post your solution, and then close the question by clicking "Accept as Solution" on your own post.
Yes
Participating Experts are given an opportunity to object prior to your question being deleted. If no objections are posted after four days, your question will be deleted automatically.
Thank you. Of course I thank the expert as the dialogue fueled me to see the problem otherwise and find the solution. Once mre, thank you.
chrsyl
Now that makes more sense what you explain what that 'yes, yes, thank you' means.
It might have been better if you have said something like 'i've found my solution by doing xyz.' which the second question exactly says what to do. The reason why the instruction says post your solution is because we want to keep the knowledge in writing so that other people who get stuck in the same problem can get help from what you have found out. It's all about sharing knowledge.
None the less glad to hear that you've found the solution.
CyanBlue
It might have been better if you have said something like 'i've found my solution by doing xyz.' which the second question exactly says what to do. The reason why the instruction says post your solution is because we want to keep the knowledge in writing so that other people who get stuck in the same problem can get help from what you have found out. It's all about sharing knowledge.
None the less glad to hear that you've found the solution.
CyanBlue
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Reason for selecting own solution: It addresses the problem and is working.
CyanBlue