所以我得到了这个bulletContainer类,可以拍摄所有这些子弹,并且可以当我把这个课程放在一个动作片中添加到舞台上时,拍得非常好。我不能在电影剪辑中拥有它,因为当我调用bulletClass的函数时,它会向我发出一个错误,说它存在。现在,我的问题是当我将addChild(bulletClass)放到舞台上时,它将完全按照其编程方式工作,除了运动/动画。子弹移动很好,除非我以相反的方式拍摄它,而不是相反的方式它向左侧射出一点点(如果我直接向上指向左侧),那么如果我指向完全正确它将会旋转拍摄我的权利。所以它基本上是低音 - 在各方面,就像我说的那样,只有当我用一个类(扩展Movieclip)的addChild()时。我不知道为什么我会给你我的代码,因为它会让你更加困惑,一切都会检查出来;我认为这是一个转换,比如扩展Movieclip的类可能与Library MovieClip的方向不同?
此代码位于bulletAdder()函数中,它是bulletContainer中唯一创建项目符号的项目
var localPlayer = Object(root).localSurvivor;
//Select what movieclip should go into the bullet
var newBullet;
newBullet = new bullet1;
//Create a local movieclip for this
var newBulletMC:MovieClip = new MovieClip;
newBulletMC.addChild(newBullet);
newBulletMC.x = setX;
newBulletMC.y = setY;
//trace(localPlayer.rotation);
//Create the newBullet class for movement
var localPlayerRotation = Object(root).localSurvivor.rotation;
trace(localPlayerRotation);
var newBulletClass:bulletClass = new bulletClass(localPlayerRotation, bulletLifetime);
//Add bulletMC to the bulletClass
newBulletClass.addChild(newBulletMC);
//Add to array
bulletArray.push(newBulletClass);
//Add to stage
localStage.addChild(newBulletClass);
这是bulletClass,在屏幕上移动的子弹
package com{
import flash.display.*
import flash.utils.*
public class bulletClass extends MovieClip{
public var lifetime = 0;
public var dir = 0;
var animationInt;
public function bulletClass(playerRotation, bLifetime:Number = 1){
dir = playerRotation
//Start life
animationInt = setInterval(animateBullet, 40);
}
private function animateBullet(){
this.x += 10 * Math.sin(dir * (Math.PI / 180));
this.y += 10 * Math.cos(dir * (Math.PI / 180));
}
}
}
答案 0 :(得分:1)
看起来你把它分类了吗?
我会建议一件事 - 当你做这样的事情时,使用显示列表并不总是有意义的。如果你在舞台上发生了很多事情,那么它将会变慢,性能会变得粗略。
如果您正在构建游戏,我强烈建议您至少查看一个或两个大型Flash游戏框架。他们在幕后为您做了很多优化,甚至大部分游戏逻辑都被抽象出来。例如,查看Flixel - 超级易于快速启动和运行,以及许多教程。
只是我的两分钱,希望它有所帮助!