flash,as3,如何控制一个MC旋转固定的角度就会停在那里? mc.rotation-=3; 这个实在不行。例如按一次就旋

mc.rotation-=3;这个实在不行。例如按一次就旋转10度,长按也只能转到10的倍数那里。帮帮忙,教教我,谢谢(我没分了,因为老是没人答,都用完了)补充下操作清楚... mc.rotation-=3; 这个实在不行。例如按一次就旋转10度,长按也只能转到10的倍数那里。帮帮忙,教教我,谢谢(我没分了,因为老是没人答,都用完了)
补充下操作清楚点:1 按键一次转10度,按键二次转20度,就是说一次一次地按就转10度; 2长按就一直转,直到松开为止mc总共转的度数还是10的倍数。
as2代码会报错,建议不要,我的类文件是AS3的。谢谢
大家一起学习
(精华)最后补充:谢谢回答,如果给mc设定一个位置或角度,当mc旋转到该位置或者角度附近时停止按键,则判断以上两个位置是否足够接近,如果是,则mc自动向设定点靠拢。这个功能如何编,思考中,原来我一直想要的就是这个功能,策划真的很讲究技术和描述能力。
展开
 我来答
alanbabbage
2011-05-04 · TA获得超过977个赞
知道小有建树答主
回答量:755
采纳率:0%
帮助的人:1146万
展开全部
以下为一个as3.0的类
按我的理解,舞台有一按钮btn,一影辑mc

按钮btn点一下mc会转动指定角度
按住按钮btn不动一段时间,mc会自动转动
当释放按钮btn时,会判断是否与指定角度(位置)接近,如接近,则会自动跳到指定角度,否则只是停止转动

如果不是你想要的效果,请无视

PS:由于格式显示问题,建议将代码复制到flash中或是as文件中阅读

代码如下:

package {
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
//以上会用到的类,一次import入来

public class Main extends MovieClip {
var speed = 3;//点一下元件自转角度
var target_angle = 135;//目标角度,当元件角度接近时会自动帖上

var nowTime = 0;//计算时间的一个临时值,可无视
var timer:Timer;//声明一个Timer用于时间的计算

public function Main() {//类的构造函数

timer = new Timer(300);//new一个Timer,设定每300毫秒计算一次
timer.addEventListener(TimerEvent.TIMER,timerHandler);//注册一个计算倾听

//按钮的鼠标按下和鼠标释放倾听
btn.addEventListener(MouseEvent.MOUSE_DOWN,btnMouseDown);
btn.addEventListener(MouseEvent.MOUSE_UP,btnMouseUp);

}

//Timer计算函数
public function timerHandler(e) {
nowTime++;
if (nowTime >= 3) {//3是指定时间,计算是N*300毫秒,即当鼠标按下3*300毫秒后
e.currentTarget.stop();//时间停止计时了
mc.addEventListener(Event.ENTER_FRAME,mcRota);//mc注册个ENTER_FRAME倾听,用于自动自转
}
}

//按钮鼠标按下函数
public function btnMouseDown(e) {
nowTime = 0;//重置时间
timer.start();//开始计时
}

//按钮鼠标释放函数
public function btnMouseUp(e) {
timer.stop();//停止计时
mc.removeEventListener(Event.ENTER_FRAME,mcRota);//mc停止自转

//判断是否靠近目标
if (Math.abs(target_angle - mc.rotation) < 5) {
//靠近目标,则自动贴近
mc.rotation = target_angle;
trace("靠近目标角度,自动帖近!");
} else {
//如果没靠近则当一次按钮的点击,mc自转指定角度
mc.rotation += speed;
}
}

//mc自转函数
public function mcRota(e) {
mc.rotation+=speed;
}
}

}
mscyhll
2011-05-03 · TA获得超过643个赞
知道小有建树答主
回答量:494
采纳率:0%
帮助的人:497万
展开全部
给你提供一种方法,还需要你根据需要在改改!,保证一致转到
stage.addEventListener(MouseEvent.CLICK,mcRotation);
stage.addEventListener(MouseEvent.MOUSE_DOWN,mcRotation);
stage.addEventListener(MouseEvent.MOUSE_UP,mcRotation);
function mcRotation(e:* ):void
{
trace(e.buttonDown)

if(e.type=="mouseDown")
addEventListener(Event.ENTER_FRAME,mcRotation1);
else if(e.type=="mouseUp")
removeEventListener(Event.ENTER_FRAME,mcRotation1);
else if(e.type=="click")
mc.rotation+=10;
else ;
}
function mcRotation1(e:* ):void
{
mc.rotation+=10;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
南国孤叶
2011-05-03 · TA获得超过244个赞
知道小有建树答主
回答量:343
采纳率:0%
帮助的人:191万
展开全部
在舞台那新建一个_mc,和一个_btn;然后把一下代码黏贴到帧去
_btn.addEventListener(MouseEvent.CLICK,onclick);
var _down:Boolean = false;
function onclick(e:MouseEvent){
_mc.rotation +=10;
}
_btn.addEventListener(MouseEvent.MOUSE_DOWN,ondown);
_btn.addEventListener(MouseEvent.MOUSE_UP,onup);
function ondown(e:MouseEvent){
_down = true;
}
function onup(e:MouseEvent){
_down = false;
}

this.addEventListener(Event.ENTER_FRAME,onenter);

function onenter(e:Event){
if(_down)
_mc.rotation +=10
}
原理就是,当你down的时候会触发到enterframe的事件。up的时候就解除enterframe事件触发的条件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
EoneLiu
2011-05-03 · TA获得超过271个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:196万
展开全部
比如创建按钮my_btn
mc 是你的元件名

var inum=0;
my_btn.onRelease = function() {
rot(inum++)
}
function rot(inum){
if (inum > 5) { // 意思是执行5次以后。就不执行了。
mc.rotation-=3; //随自己要求。设置角度
}
}
不明白可以 HI
追问
谢谢,可惜as2代码不懂
追答
创建 按钮元件。命名 my_btn
需要旋转 的元件 命名 mc
新建图层 命名 as 。选中图层 按 f9
粘贴 代码
var inum=0;
my_btn.onRelease = function() {
rot(inum++)
}
function rot(inum){
if (inum > 5) { // 意思是执行5次以后。就不执行了。
mc.rotation-=3; //随自己要求。设置角度 ,设置大数字。能看到效果
}
}
按ctrl + enter 测试就行了。。点下按钮。会旋转
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式