
AS3.0 让物体旋转
代码简单的写了下可是有一个问题一个类package{importflash.display.MovieClip;importflash.events.Event;publ...
代码简单的写了下 可是有一个问题
一个类
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Dapao extends MovieClip {
public function Dapao() {
init();
}
private function init():void {
addEventListener(Event.ENTER_FRAME,ef);
}
private function ef(e:Event):void {
var dx:Number=mouseX-this.x;
var dy:Number=mouseY-this.y;
var angle:Number=Math.atan2(dy,dx);
this.rotation=angle*180/Math.PI;
}
}
}
文档类
package {
import flash.display.Sprite;
import flash.events.Event;
public class tiaoshi extends Sprite{
private var dapao:Dapao=new Dapao();
public function tiaoshi() {
init();
}
private function init():void
{
dapao.x=stage.stageWidth/2;;
dapao.y=stage.stageHeight/2;
addChild(dapao);
}
}
}
我的想法是把 这个监听直接写在 类得里面 那么 再用文档类调用时我们岂不可以方便很多
当时 按上面得设想 写出来之后 发现 物体并不是按照鼠标与其坐标之间的夹角进行旋转 而且非常的死转不动 我Dapao类 内监听删除 重写了文档类
package {
import flash.display.Sprite;
import flash.events.Event;
public class tiaoshi extends Sprite{
private var dapao:Dapao=new Dapao();
public function tiaoshi() {
init();
}
private function init():void
{
dapao.x=stage.stageWidth/2;;
dapao.y=stage.stageHeight/2;
addChild(dapao);
addEventListener(Event.ENTER_FRAME,ef);
}
private function ef(e:Event):void {
var dx:Number=mouseX-dapao.x;
var dy:Number=mouseY-dapao.y;
var angle:Number=Math.atan2(dy,dx);
dapao.rotation=angle*180/Math.PI;
}
}
}
发现 又正常了
这是为什么 难道事件监听不能写在 普通类里 只能写在文档类里才能 正常吗?
请高手解答 上面的 普通类 是和库里的一个元件 绑定了 展开
一个类
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Dapao extends MovieClip {
public function Dapao() {
init();
}
private function init():void {
addEventListener(Event.ENTER_FRAME,ef);
}
private function ef(e:Event):void {
var dx:Number=mouseX-this.x;
var dy:Number=mouseY-this.y;
var angle:Number=Math.atan2(dy,dx);
this.rotation=angle*180/Math.PI;
}
}
}
文档类
package {
import flash.display.Sprite;
import flash.events.Event;
public class tiaoshi extends Sprite{
private var dapao:Dapao=new Dapao();
public function tiaoshi() {
init();
}
private function init():void
{
dapao.x=stage.stageWidth/2;;
dapao.y=stage.stageHeight/2;
addChild(dapao);
}
}
}
我的想法是把 这个监听直接写在 类得里面 那么 再用文档类调用时我们岂不可以方便很多
当时 按上面得设想 写出来之后 发现 物体并不是按照鼠标与其坐标之间的夹角进行旋转 而且非常的死转不动 我Dapao类 内监听删除 重写了文档类
package {
import flash.display.Sprite;
import flash.events.Event;
public class tiaoshi extends Sprite{
private var dapao:Dapao=new Dapao();
public function tiaoshi() {
init();
}
private function init():void
{
dapao.x=stage.stageWidth/2;;
dapao.y=stage.stageHeight/2;
addChild(dapao);
addEventListener(Event.ENTER_FRAME,ef);
}
private function ef(e:Event):void {
var dx:Number=mouseX-dapao.x;
var dy:Number=mouseY-dapao.y;
var angle:Number=Math.atan2(dy,dx);
dapao.rotation=angle*180/Math.PI;
}
}
}
发现 又正常了
这是为什么 难道事件监听不能写在 普通类里 只能写在文档类里才能 正常吗?
请高手解答 上面的 普通类 是和库里的一个元件 绑定了 展开
1个回答
2011-08-04
展开全部
改成这样吧
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Dapao extends MovieClip
{
public function Dapao()
{
stage?init():addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(_evt:Event=null):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE,ef);
}
private function ef(_evt:MouseEvent):void
{
var dx:Number = _evt.localX - this.x;
var dy:Number = _evt.localY - this.y;
var angle:Number = Math.atan2(dy,dx);
this.rotation = angle * 180 / Math.PI;
}
}
}
原因是这两句出问题
trace(mouseX) //加上这句你就知道什么问题了 这个值是以影片剪辑自身注册点0点为坐标的,所以会出现莫明其妙的坐标错误
var dx:Number=mouseX-this.x;
var dy:Number=mouseY-this.y;
要不改成这样也行
var dx:Number =parent.mouseX - this.x;
var dy:Number = parent.mouseY - this.y;
改成这样也行,反正就是要以主场景的stage为标准参照
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
public class Dapao extends MovieClip
{
public function Dapao()
{
init();
}
private function init():void
{
addEventListener(Event.ENTER_FRAME,ef);
}
private function ef(e:Event):void
{
var dx:Number =stage.mouseX - this.x;
var dy:Number = stage.mouseY - this.y;
var angle:Number = Math.atan2(dy,dx);
this.rotation = angle * 180 / Math.PI;
}
}
}
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Dapao extends MovieClip
{
public function Dapao()
{
stage?init():addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(_evt:Event=null):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE,ef);
}
private function ef(_evt:MouseEvent):void
{
var dx:Number = _evt.localX - this.x;
var dy:Number = _evt.localY - this.y;
var angle:Number = Math.atan2(dy,dx);
this.rotation = angle * 180 / Math.PI;
}
}
}
原因是这两句出问题
trace(mouseX) //加上这句你就知道什么问题了 这个值是以影片剪辑自身注册点0点为坐标的,所以会出现莫明其妙的坐标错误
var dx:Number=mouseX-this.x;
var dy:Number=mouseY-this.y;
要不改成这样也行
var dx:Number =parent.mouseX - this.x;
var dy:Number = parent.mouseY - this.y;
改成这样也行,反正就是要以主场景的stage为标准参照
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
public class Dapao extends MovieClip
{
public function Dapao()
{
init();
}
private function init():void
{
addEventListener(Event.ENTER_FRAME,ef);
}
private function ef(e:Event):void
{
var dx:Number =stage.mouseX - this.x;
var dy:Number = stage.mouseY - this.y;
var angle:Number = Math.atan2(dy,dx);
this.rotation = angle * 180 / Math.PI;
}
}
}

2024-10-10 广告
PI旋转定位台是精密机电领域的一款高端产品,以其卓越的性能和精度赢得了广泛认可。该产品采用先进的驱动和控制系统,确保旋转运动的高精度和高稳定性。同时,其紧凑的设计和优化的结构使其适用于各种空间限制较大的应用场景。在深圳市华领精密机电有限公司...
点击进入详情页
本回答由华领精密机电提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询