主题:  帮忙!作了一个游戏,转向算法不完美!

痒痒

职务:普通成员
等级:1
金币:0.0
发贴:32

5D荣誉斑竹

职务:普通成员
等级:2
金币:2.0
发贴:617
#22002/1/17 11:38:12
请将原文件附上,或者将代码贴出!写明你想要什么样的效果!



痒痒

职务:普通成员
等级:1
金币:0.0
发贴:32
#32002/1/17 14:35:02
当鼠标放在,车身上放,车前部朝下时,就不停的摆动,越跑越远。



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#42002/1/17 14:46:19
看上去应很容易解决,你还是把源码贴出来把


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

痒痒

职务:普通成员
等级:1
金币:0.0
发贴:32
#52002/1/17 15:15:26
onClipEvent (enterFrame) {
    _root.Bullet._visible=false;
    //====================
    Disx = _root._xmouse-_x;
    Disy = _root._ymouse-_y;
    // =====================
    AngleC = Math.atan(Disy/Disx);
    _root.rootAngleC = Math.floor(AngleC*(180/Math.PI))+90;
    // =====================
    Bodyan = this._rotation;
    _root.Tbangle = this._rotation;
    // ===================速度设定
    Speed = Math.floor(Math.abs(Disx/100)+Math.abs(Disy/100));
    _root.txtSpeed = Speed;
    // ==========
    _x = _x-Speed*Math.sin(Bodyan/(180/Math.PI));
    _y = _y+Speed*Math.cos(Bodyan/(180/Math.PI));
    // =====================
    if (_root._xmouse>_x) {
        this._rotation = this._rotation-(this._rotation-_root.rootAngleC+180)/20;
    } else {
        this._rotation = this._rotation-(this._rotation-_root.rootAngleC)/20;
    }
    // ==============
    _root.Bette._x = _x;
    _root.Bette._y = _y;
    // ===================
    if (_root._xmouse>_x) {
        _root.Bette._rotation = _root.rootAngleC;
    } else {
        _root.Bette._rotation = _root.rootAngleC+180;
    }
    // =========================烟雾浓度
    this.Smoke._alpha = (Speed/10)*100;
    this.Smoke1._alpha = (Speed/10)*100;
    // ========================
}
onClipEvent (mouseDown) {
    duplicateMovieClip (_root.Bullet, A, A);
    A = A+1;
}



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#62002/1/17 15:24:52
痒痒在上个帖子中说
引用:
onClipEvent (enterFrame) {
    _root.Bullet._visible=false;
    //====================
    Disx = _root._xmouse-_x;
    Disy = _root._ymouse-_y;
    // =====================
    AngleC = Math.atan(Disy/Disx);
    _root.rootAngleC = Math.floor(AngleC*(180/Math.PI))+90;
    // =====================
    Bodyan = this._rotation;
    _root.Tbangle = this._rotation;
    // ===================速度设定
    Speed = Math.floor(Math.abs(Disx/100)+Math.abs(Disy/100));
    _root.txtSpeed = Speed;
    // ==========
    _x = _x-Speed*Math.sin(Bodyan/(180/Math.PI));
    _y = _y+Speed*Math.cos(Bodyan/(180/Math.PI));
    // =====================
    if (_root._xmouse>_x) {
        this._rotation = this._rotation-(this._rotation-_root.rootAngleC+180)/20;
    } else {
        this._rotation = this._rotation-(this._rotation-_root.rootAngleC)/20;
    }
    // ==============
    _root.Bette._x = _x;
    _root.Bette._y = _y;
    // ===================
    if (_root._xmouse>_x) {
        _root.Bette._rotation = _root.rootAngleC;
    } else {
        _root.Bette._rotation = _root.rootAngleC+180;
    }
    // =========================烟雾浓度
    this.Smoke._alpha = (Speed/10)*100;
    this.Smoke1._alpha = (Speed/10)*100;
    // ========================
}
onClipEvent (mouseDown) {
    duplicateMovieClip (_root.Bullet, A, A);
    A = A+1;
}




为什么把action写在mc上呢,这样显得很乱,我建议你写在时间轴上,应该好一些


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

痒痒

职务:普通成员
等级:1
金币:0.0
发贴:32
#72002/1/18 9:07:36
我认为使用MC动作,跟趋向于模块化设计,当然Frame动作也行,但是执行的效率稍差,要不然为什么还要 onclipevent 语句。



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#82002/1/19 16:09:39
痒痒在上个帖子中说
引用:
我认为使用MC动作,跟趋向于模块化设计,当然Frame动作也行,但是执行的效率稍差,要不然为什么还要 onclipevent 语句。



这种说法是错误的,这是flash编程初学者经常范的错误,认为写道onclipevent上更方便,其实这样写程序在顺序上是非常混乱的,对于编程者的管理是非常不方便的,另外对于flash解释程序也不好,因为如果有很多个mc上都有程序,那么就会有程序执行顺序的问题,如果这里面有变量的传递的话就可能出现混乱。
我觉得写普通的执行程序,最好是在什么对象下控制它下面的mc,而尽量不要控制它外边的mc,那样必然导致程序的混乱。当然我更赞成把程序写成更多的函数甚至用面向对象话的程序编程,那样就只要把程序写的第一帧,以后就只要调用就行了


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

redsteps

职务:普通成员
等级:1
金币:1.0
发贴:144
#92002/1/19 19:30:44
goldgoat在上个帖子中说
这种说法是错误的,这是flash编程初学者经常范的错误,认为写道onclipevent上更方便,其实这样写程序在顺序上是非常混乱的,对于编程者的管理是非常不方便的,另外对于flash解释程序也不好,因为如果有很多个mc上都有程序,那么就会有程序执行顺序的问题,如果这里面有变量的传递的话就可能出现混乱。
我觉得写普通的执行程序,最好是在什么对象下控制它下面的mc,而尽量不要控制它外边的mc,那样必然导致程序的混乱。当然我更赞成把程序写成更多的函数甚至用面向对象话的程序编程,那样就只要把程序写的第一帧,以后就只要调用就行了 [/quote]

这种拿flash当vc,为了表面上的结构化而结构化是很不适合的。抹煞了flash的特色,确实利用把所有的东西都放到第一桢可以执行,但是可执行就是最好吗?
第一桢里放上10K的代码,可是好管理的,但是好查找吗?代码一定要看在眼前才安心吗?



金山羊

职务:普通成员
等级:4
金币:10.0
发贴:827
#102002/1/19 21:18:37
这样说是错误的,自己有些程序上的不良习惯还是应该改的,我这样说明好了
就是最优秀的程序员也是不可能一次就能把一个程序写的完全正确或完美的,都要经过很多此的修改调试才能打到最后的成功,如果你的程序写的到处都是,那你不是要花费别人几倍的时间来修改你的程序吗,调试的时候更是这样,知道有错误却找不到在哪里,那不是很令人懊恼的事吗,最后你可能放弃了修改那个错误的机会,所以我劝大家从一开始就要养成一个写程序的好习惯。


5d.cn
FLASHDEP
TECHNOLOGY SUPPORT
JAVA/ACTIONSCRIPT/javascript
CFML/JSP/COLDFUSION/FLASH REMOTING
JRUN/COLDFUSIONMX
FLASH/DREAMWEARER

5D荣誉斑竹

职务:普通成员
等级:2
金币:2.0
发贴:617
#112002/1/20 10:03:29
每个人写程序都会有自己的习惯,各有各的说法,没必要把自己的习惯强加给别人~就我个人而言,我还是喜欢放在mc上



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#122002/1/20 20:46:27
对,每个人都用自己的习惯,也都用自己的调试方法。我认为应该以可读性和高效为原则。

这个先不要讨论了吧,人家的问题还没解决呢

我认为这个问题是因角度和弧度之间转换引起90/270度混乱而产生的(在坦克与x轴垂直时,可发现炮筒忽上忽下),所以,应该简化计算(确实存在一些重复的计算)。

这段:
    _x = _x-Speed*Math.sin(Bodyan/(180/Math.PI));
    _y = _y+Speed*Math.cos(Bodyan/(180/Math.PI));

改成::
    _x = _x+Speed*Math.sin(AngleC);
    _y = _y+Speed*Math.cos(AngleC);

再试试。

如果不怕我们剽窃你的劳动成果的话,最好把fla贴出来

编辑历史:[这消息被janlay编辑过(编辑时间2002-01-20 20:51:48)]


痒痒

职务:普通成员
等级:1
金币:0.0
发贴:32
#132002/1/21 9:22:04
大家来个比赛,看谁编得好。



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#142002/1/21 20:17:38
你提供的信息太少,现在所有的想法都只是猜测。



痒痒

职务:普通成员
等级:1
金币:0.0
发贴:32
#152002/1/25 11:13:53
还要什么信息??