|
|
|||||
ZackMercury и ещё вопрос: trace(this) пишет: [object MainTimeline] - он ссылается на stage ?
|
|
|||||
- это верхушка дисплей-пирамиды.
- это класс, который автоматически создаётся Flash IDE в целях абстрагировать вас от работы с классами. По сути он является главным классом, экземпляр которого создаётся автоматически и помещается в корень stage. - это и есть ваш MainTimeline. только в коде главной линии времени(если вы напишите код в мувике, там this будет ссылаться на экземпляр конкретного мувика). Я сказал, что вам не стоит трогать верхушку, и добавлять только в главный класс(в кадрах - MainTimeline).
__________________
There is no thing in this world that is not simple. |
|
|||||
как то не корректно стреляет мой кораблик
import flash.events.MouseEvent; import flash.display.MovieClip; import flash.display.Sprite; var speed:Number = 10;// скорость пули = 10 var depth:Number = 0;// глубина = 0 var nose:int = 50;// нос корябля var xmov:Number; var ymov:Number; var cont:Sprite = new Sprite ; stage.addEventListener(MouseEvent.MOUSE_MOVE , moveShip); stage.addEventListener(MouseEvent.CLICK, fire); function moveShip(e:MouseEvent):void { var xDiff = mouseX - ship.x;// находим var yDiff = mouseY - ship.y;// координаты var angle = Math.atan2(yDiff,xDiff); angle = angle * 180 / Math.PI;// переводим в градусы ship.rotation = angle;// поворачиваем } function fire(e:MouseEvent) { var angle = ship.rotation; angle = angle * Math.PI / 180; var bull:MovieClip = new bul(); cont.addChild(bull); this.addChild(cont); cont.getChildAt(cont.numChildren - 1).x = ship.x + nose * Math.cos(angle); cont.getChildAt(cont.numChildren - 1).y = ship.y + nose * Math.sin(angle); cont.getChildAt(cont.numChildren - 1).xmov = speed * Math.cos(angle); cont.getChildAt(cont.numChildren - 1).ymov = speed * Math.sin(angle); cont.getChildAt(cont.numChildren - 1).addEventListener(Event.ENTER_FRAME ,bullMove); function bullMove(e:Event) { cont.getChildAt(cont.numChildren - 1).x += cont.getChildAt(cont.numChildren - 1).xmov; cont.getChildAt(cont.numChildren - 1).y += cont.getChildAt(cont.numChildren - 1).ymov } } |
|
|||||
не делайте так. вы не в курсе, что это такое и как называется, поэтому просто не делайте так.
Правильно: import flash.events.MouseEvent; import flash.display.MovieClip; import flash.display.Sprite; var speed:Number = 10;// скорость пули = 10 var depth:Number = 0;// глубина = 0 var nose:int = 50;// нос корабля var xmov:Number; var ymov:Number; var bullets:Array = []; stage.addEventListener(MouseEvent.MOUSE_MOVE , moveShip); stage.addEventListener(MouseEvent.CLICK, fire); stage.addEventListener(Event.ENTER_FRAME, update); function moveShip(e:MouseEvent):void { var xDiff = mouseX - ship.x;// находим var yDiff = mouseY - ship.y;// координаты var angle = Math.atan2(yDiff,xDiff); angle = angle * 180 / Math.PI;// переводим в градусы ship.rotation = angle;// поворачиваем } function fire(e:MouseEvent):void { var angle = ship.rotation * Math.PI / 180;; var bull:MovieClip = new bul(); addChild(bull); bullets.push(bull); bull.angle = angle;//ну можно и ymov/xmov записать, так просто короче, а производительность это сейчас не посадит. bull.x = ship.x + nose * Math.cos(angle); bull.y = ship.y + nose * Math.sin(angle); } function update(e:Event = null):void { for(var i:int = 0; i < bullets.length; i ++) { bullets[i].x += Math.cos(bullets[i].angle) * speed; bullets[i].y += Math.sin(bullets[i].angle) * speed; } }
__________________
There is no thing in this world that is not simple. |
|
|||||
ZackMercury Спасиб !
|
|
|||||
Ещё неплохо бы сделать, чтобы как только пуля выходит за пределы экрана она удалялась из массива и дисплейлиста, иначе это приведёт к нарастающей нагрузке до полного зависания.
__________________
There is no thing in this world that is not simple. |
|
|||||
Цитата:
|
Часовой пояс GMT +4, время: 01:41. |
|
« Предыдущая тема | Следующая тема » |
|
|