Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   направление шарика в сторону курсора мыши (http://www.flasher.ru/forum/showthread.php?t=152263)

Gonsalez 14.03.2011 21:11

направление шарика в сторону курсора мыши
 
есть шарик с именем mc который можно двигать с помощью клавиатуры.. при нажатии клавиши А либо левой кнопки мыши этот шарик стреляет другим шариком но лишь в одном направлении..

вот код:
Код AS3:

import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.ui.Keyboard;
 
var dist:Number = 0;
var Balls:Array = new Array();
 
 
 
 
var fire:MovieClip;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardF);
//событие клавиатуры;
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse);
stage.addEventListener(Event.ENTER_FRAME, moveBall);
// событие обновления экрана;
 
fire= new MovieClip();
fire.x = 0;
fire.y = 0;
 
 
 
function mouse(e:MouseEvent):void
{
        var Ball:ball = new ball();
 
 
                addChild(fire);
                fire.addChild(Ball);
                Ball.x = mc.x;
                Ball.y = mc.y;
 
 
 
 
 
}
 
 
 
function keyboardF(e:KeyboardEvent):void
{
 
if (e.keyCode == Keyboard.A)
{
        var Ball:ball = new ball();
        addChild(fire);
                fire.addChild(Ball);
                Ball.x = mc.x;
                Ball.y = mc.y;
}
 
 
        if (e.keyCode == Keyboard.DOWN)
        {
                mc.y +=  4;
        }
        else if (e.keyCode == Keyboard.UP)
        {
                mc.y -=  4;
        }
 
        if (e.keyCode == Keyboard.RIGHT)
        {
                mc.x +=  4;
        }
        else if (e.keyCode == Keyboard.LEFT)
        {
                mc.x -=  4;
        }
}
 
 
 
function moveBall(e:Event):void
{
 
 
        for (var i=0; i<fire.numChildren; i++)
        {
                var Ball:DisplayObject = fire.getChildAt(i);
                Ball.y -=  5;
        if (Ball.y < 0)
                {
                fire.removeChildAt(i);
                trace("Шарик удален");
                }   
        }
 
}

нужно сделать чтобы при выстреле шарик летел в ту сторону где находится курсор мыши.. помогите советом как такое можно осуществить, с помощью чего, как действовать дальше?

Добавлено через 3 часа 16 минут
нашел такой код
Код AS3:

function enterFrame(event:Event):void {
object.x+= speed;
object.y+= speed;
object.x+= speed*Math.cos(angle);
object.y+= speed*Math.sin(angle);
object.rotation=Math.atan2(mouseY-object.y,mouseX-object.x)*180/Math.PI;
}

работает но шарик летит в сторону курсора но если сдвинуть курсор шарик меняет направление и продолжает лететь к курсору и останавливается рядом с ним, а нужно чтобы летел в прямом направлении в ту сторону где находился курсор при выстреле не меняя направления.. помогите разобраться

nuToH 15.03.2011 01:11

расчитывай "найденный" код по ивенту MOUSE_DOWN
чтот вроде:
Код AS3:

var dx:Number;
var dy:Number;
function mouseDownHandler(event:MouseEvent):void {
var angle:Number = Math.atan2(mouseY-object.y, mouseX-object.x);
this.dx = speed*Math.cos(angle);
this.dy = speed*Math.sin(angle);
}
function enterFrame(event:Event):void {
object.x += this.dx;
object.y += this.dy;
}


Gonsalez 16.03.2011 13:57

сделал по этому методу шарики при выстреле не прилипают к курсору но все равно продолжают менять направление в сторону где находился курсор при повторном выстреле
Код AS3:

import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.events.MouseEvent;
import flash.ui.Keyboard;
 
var dist:Number = 0;
var Balls:Array = new Array();
var speed:Number = 10;
var angle:Number;
var dx:Number;
var dy:Number;
 
 
 
 
 
 
 
 
var fire:MovieClip;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardF);
//событие клавиатуры;
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse);
stage.addEventListener(Event.ENTER_FRAME, moveBall);
// событие обновления экрана. Об этом смотри ниже;
 
fire= new MovieClip();
fire.x = 0;
fire.y = 0;
 
 
 
function mouse(e:MouseEvent):void
{//тип String. Пояснение ниже
 
        var Ball:ball = new ball();
        var angle:Number = Math.atan2(mouseY - mc.y,mouseX - mc.x);
 
 
        this.dx = speed * Math.cos(angle);
        this.dy = speed * Math.sin(angle);
 
 
        addChild(fire);
        fire.addChild(Ball);
        Ball.x = mc.x;
        Ball.y = mc.y;
 
 
        trace(angle);
        trace(dx, dy);
 
 
 
 
}
 
 
 
function keyboardF(e:KeyboardEvent):void
{//тип String. Пояснение ниже
 
        if (e.keyCode == Keyboard.A)
        {
                var Ball:ball = new ball();
                addChild(fire);
                fire.addChild(Ball);
                Ball.x = mc.x;
                Ball.y = mc.y;
        }
 
 
 
        if (e.keyCode == Keyboard.DOWN)
        {//проверяется, какая клавиша нажата
                mc.y +=  4;
        }
        else if (e.keyCode == Keyboard.UP)
        {
                mc.y -=  4;
        }
 
        if (e.keyCode == Keyboard.RIGHT)
        {//проверяется, какая клавиша нажата
                mc.x +=  4;
        }
        else if (e.keyCode == Keyboard.LEFT)
        {
                mc.x -=  4;
        }
}
 
 
 
function moveBall(e:Event):void
{
 
        for (var i=0; i<fire.numChildren; i++)
        {
 
                var Ball:DisplayObject = fire.getChildAt(i);
 
 
                Ball.x += dx;
                Ball.y += dy;
 
                if (Ball.y < dy,Ball.x < dx)
                {
                        fire.removeChildAt(i);
                        trace("Шарик удален");
                }
        }
 
}

помогите разобраться найти ошибку

Gonsalez 19.03.2011 20:59

проблема так и не решена((

пробовал сделать еще таким методом
Код AS3:

var dist:Number = 0;
var mc_speedXFROM: Array=new Array();
var mc_speedYFROM: Array=new Array();
var mc_angle;
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardF);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse);
stage.addEventListener(Event.ENTER_FRAME, moveBall);
 
 
 
function mouse(e:MouseEvent):void
{
 
 
        for (var i=0; i<fire.numChildren; i++)
        {
 
 
                mc_angle = Math.atan2(mouseY - mc.y,mouseX - mc.x);
                mc_speedXFROM[i] = Math.cos(mc_angle);
                mc_speedYFROM[i] = Math.sin(mc_angle);
                trace(i);
        }
        var Ball:ball = new ball();
        Ball.x = mc.x;
        Ball.y = mc.y;
        fire.addChildAt(Ball,0);
}
 
 
function keyboardF(e:KeyboardEvent):void
{
 
        if (e.keyCode == Keyboard.DOWN)
        {
                mc.y +=  4;
        }
        else if (e.keyCode == Keyboard.UP)
        {
                mc.y -=  4;
        }
 
        if (e.keyCode == Keyboard.RIGHT)
        {
                mc.x +=  4;
        }
        else if (e.keyCode == Keyboard.LEFT)
        {
                mc.x -=  4;
        }
}
 
function moveBall(e:Event):void
{
 
        for (var s=0; s<fire.numChildren; s++)
        {
                var Ball:DisplayObject = fire.getChildAt(s);
                Ball.x +=  mc_speedXFROM[s] * 5;
                Ball.y +=  mc_speedYFROM[s] * 5;
 
                if (Ball.y < 0)
                {
                        fire.removeChildAt(s);
                        trace("Шарик удален");
                }
        }
}

но проблема все та же остается(( помогите разобраться что не правильно

cr0w312 19.03.2011 22:39

ты при каждом нажатии на кнопку мышки переопределяешь направление для всех шариков
Код AS3:

     for (var i=0; i<fire.numChildren; i++)
        {
                mc_angle = Math.atan2(mouseY - mc.y,mouseX - mc.x);
                mc_speedXFROM[i] = Math.cos(mc_angle);
                mc_speedYFROM[i] = Math.sin(mc_angle);
                trace(i);
        }


Gonsalez 19.03.2011 23:05

как это исправить?? задать параметр для i правильно понимаю?

cr0w312 19.03.2011 23:47

там вообще цикл не нужен

Код AS3:

                mc_angle = Math.atan2(mouseY - mc.y,mouseX - mc.x);
                mc_speedXFROM.push = Math.cos(mc_angle);
                mc_speedYFROM.push = Math.sin(mc_angle);

естественно это решение не лучшее, я бы шар выделил в отдельный класс.

Gonsalez 20.03.2011 01:57

Вложений: 1
я новичок во флеше поэтому делаю тем методом который более менее понятен..
кому не сложно посмотрите пожалуйста исходный файл помогите исправить уже неделю мучаюсь с этим шаром((

cr0w312 20.03.2011 12:42

Вложений: 1
у меня твой файл не открывается, наверно CS5.
я без классов писать не умею.

kseniya 20.03.2011 12:54

Попробуйте так:
Код AS3:

function mouse(e:MouseEvent):void {
        var Ball:ball = new ball();
        fire.addChildAt(Ball,0);
        Ball.x = mc.x;
        Ball.y = mc.y;
        mc_angle = Math.atan2(mouseY - mc.y,mouseX - mc.x);
        Ball["mc_speedXFROM"] = Math.cos(mc_angle);
        Ball["mc_speedYFROM"] = Math.sin(mc_angle);
}

хранить speedXFROM и speedYFROM в шарике
и затем брать их из шарика в цикле
Код AS3:

function moveBall(e:Event):void {
        for (var s=0; s<fire.numChildren; s++) {
                var Ball:DisplayObject = fire.getChildAt(s);
                Ball.x +=  Ball["mc_speedXFROM"] * 5;
                Ball.y +=  Ball["mc_speedYFROM"] * 5;
                if (Ball.y < 0) {
                        fire.removeChildAt(s);
                        trace("Шарик удален");
                }
        }
}



Часовой пояс GMT +4, время: 21:34.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.