Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Вызов функции во флеше и передача переменных из JS (http://www.flasher.ru/forum/showthread.php?t=124372)

satrix_vip 28.04.2009 11:04

Вызов функции во флеше и передача переменных из JS
 
Привет всем!
Помогите пожаулуйста вот с токой проблемой.
Нужно чтобы где onclick="movie('external').ext(200,400)" вместо 200,400 передавались координаты курсора, и происходило это не при нажатии кнопки а постоянно!
Ответьте если кто знает!
Благодарю за проявленный интерес!

Код:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550" height="400" id="external" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="external.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="external.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="external" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
<input type="button"  onclick="movie('external').ext(200,400)" value="Call ExternalInterface" />
</body>
<script type="text/javascript">
        function movie(name)
{
                var isIE = navigator.appName.indexOf("Microsoft") != -1;
                return isIE ? window[name] : document[name];
}
</script>


dimarik 28.04.2009 19:13

Сделайте из флешки вызов метода js, в котором возвратите координаты курсора обратно флешу. Вызывайте это метод так часто, как необходимо (setInterval или onEnterFrame).

satrix_vip 29.04.2009 09:26

Спасибо за помощь!
А как из флеша вызвать функцию JS
если можно примерчик!!

dimarik 29.04.2009 11:28

Класс ExternalInterface. Пример в хелпе.

satrix_vip 29.04.2009 11:59

я написал вот так
AS
Код:

import flash.external.ExternalInterface;
var xx = ExternalInterface.call("GetCoordsx");

и
JS
Код:

function GetCoordsx()
{
x=e.pageX;
return (X)
}

но ничего не получается

dimarik 29.04.2009 14:37

Исправьте, возможно из-за этого

было
x=e.pageX;
return (X)

нужно

x=e.pageX;
return x;

satrix_vip 29.04.2009 14:47

помогите что не так
вот весь код на хтмл
Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r" />
<title>external</title>
</head>
<body onload=movie('external').ext(200)>
<!--url's used in the movie-->
<!--text used in the movie-->
<!-- saved from url=(0013)about:internet -->
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550" height="400" id="external" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="external.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="external.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="external" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</body>
<script type="text/javascript">
        function movie(name)
{
                var isIE = navigator.appName.indexOf("Microsoft") != -1;
                return isIE ? window[name] : document[name];
}
</script>

<script language="JavaScript">
<!--

function GetCoordsx()
{
x=e.pageX;
return x;
}
function GetCoordsy()
{
return (e.pageY);
}
// -->
</script>
<textarea id="text"></textarea>

</html>

и на AS
Код AS1/AS2:

import flash.external.ExternalInterface;
var xx = ExternalInterface.call("GetCoordsx");
 
_root.tt.text=xx;
 
followMouse = function () {
        this.startX = this._x;
        this.startY = this._y;
        this.onEnterFrame = animateEye;
};
animateEye = function () {
 
        var distX = (xx-this._x)/5 -30;
        var distY = (_ymouse-this._y)/5 -25;
        if (Math.abs(distX)<75) {
                this._x = this.startX+distX;
        }
        if (Math.abs(distY)<25) {
                this._y = this.startY+distY;
        }
};
leftEye_mc.onEnterFrame = followMouse;


BestDay 29.04.2009 18:34

Плохая мысль. Все проще. Перехватываем onmousemove в JS+HTML и передаем параметры в AS через вызов SetVariable.

satrix_vip 30.04.2009 10:48

Цитата:

Сообщение от BestDay (Сообщение 816466)
Плохая мысль. Все проще. Перехватываем onmousemove в JS+HTML и передаем параметры в AS через вызов SetVariable.

спасибо за помощь!
а можно по подробнее!

dimarik 30.04.2009 11:50

Цитата:

Сообщение от BestDay (Сообщение 816466)
Плохая мысль. Все проще. Перехватываем onmousemove в JS+HTML и передаем параметры в AS через вызов SetVariable.

Плохая мысль. SetVariable устаревший метод флешплеера. Use ExternalInterface instead.

2 satrix_vip. Поиск по форуму как обычно.

satrix_vip 30.04.2009 11:57

да я уже весь форум облазил, ничего подходящего нету или я не могу сопоставить!
если кто может киньте простой примерчик! или подскажите что не так в коде! Вешаюсь!!!!!!!!!!!!!!!!

dimarik 30.04.2009 12:16

В js не силен, но что-то не помню что за "e"

Код:

function GetCoordsx() {
    x=e.pageX;
    return x;
}

потрейсите e.pageX. Выдает ли оно реальное значение?

satrix_vip 30.04.2009 16:13

спасибо dimarik за помощь
а как проверить вообще есть ли связь или нет передаются данные или нет

dimarik 30.04.2009 16:34

алерт поместите в вызываемую функцию js

satrix_vip 30.04.2009 16:40

уже делал загвостка где то во флеше в вызове функции js вы можете посмотреть правильно ли я написал соединение и вызов js функции
и нужно ли что то ещё потому что в переменной хх пишет null в тексте

Добавлено через 1 минуту
Код AS1/AS2:

import flash.external.ExternalInterface;
        var xx = ExternalInterface.call("getMouseCoords");
 
 
 
followMouse = function () {
 
        _root.tt.text=xx;
        this.startX = this._x;
        this.startY = this._y;
        this.onEnterFrame = animateEye;
};
animateEye = function () {
 
        var distX = (xx-this._x)/5 -30;
        var distY = (_ymouse-this._y)/5 -25;
        if (Math.abs(distX)<75) {
                this._x = this.startX+distX;
        }
        if (Math.abs(distY)<25) {
                this._y = this.startY+distY;
        }
};
leftEye_mc.onEnterFrame = followMouse;


dimarik 30.04.2009 16:54

import flash.external.ExternalInterface;
trace(ExternalInterface.available);

Это во-первых. Чтобы проверить доступность интерфейса.

Во-вторых, вызывайте

var xx = ExternalInterface.call("getMouseCoords");

вутри animateEye, чтобы там была актуальная информация.

BestDay 30.04.2009 17:58

Что значит устаревший? Смешно.

Все предельно просто. Вся сложность от глупости.

Код:

<script>
function onMouse()
{
    var flash = document.getElementById('my-flash-id');

    flash.SetVariable('g_mouseX',event.x) ;
    flash.SetVariable('g_mouseY',event.y) ;

}
</script>
<body onmousemove="onMouse()">
<object id="my-flash-id" .... > </object>
</body>

в AS в переменных _root.g_mouseX и _root.g_mouseY позиция мышки из HTML

dimarik 30.04.2009 18:08

BestDay, так тактично меня идиотом редко называют. Вы конечно, правы, эта конструкция будет работать.
Тогда в догонку можно на эти переменные натравить watch.

BestDay 30.04.2009 18:20

Извини!!! Действительно как-то грубо прозвучало. (((((

iNils 30.04.2009 18:52

Цитата:

Что значит устаревший? Смешно.
Для работы с флешом это устарело.

satrix_vip 04.05.2009 16:58

спасибо всем!!!
А устарело не устарело не важно, мне главное чтобы работало, а пока ничего не работает!!!!
Если кто-то сделал что-то подобное пожалуйста скиньте примерчик(самый простой, но чтобы отражал суть вопроса)!!!!!!
вот мой email:satrix_vip@mail.ru

dimarik 04.05.2009 23:40

Если есть конкретный вопрос, окромя "ничего не работает", то выслушаю.

alexcon314 05.05.2009 10:57

Можно снимать координаты мыши со страницы через каллбак. Немного подпилим пример из хэлпа.
флэш:
Код AS1/AS2:

import flash.external.ExternalInterface;
ExternalInterface.addCallback('moveEye',this,moveEye);
function moveEye(x,y){
        out.text = arg;
        eye_mc._x = x;
        eye_mc._y = y;
}

хтмл:
Код:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script language="JavaScript">
        function onMouse() {
    getMovieName("Untitled-1").moveEye(event.x/10, event.y/10);
    }
    function getMovieName(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
    return window[movieName]
    }
    else {
    return document[movieName]
    }
    }
</script>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r" />
<title>Untitled-1</title>
</head>
<body onmousemove="onMouse()" bgcolor="#ffffff">
<!--url's used in the movie-->
<!--text used in the movie-->
<!-- saved from url=(0013)about:internet -->
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550" height="400" id="Untitled-1" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="Untitled-1.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="Untitled-1.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="Untitled-1" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</body>
</html>



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

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