Форум 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=127394)

Zhihar 13.07.2009 02:15

непонятная ошибка при передачи методу класса параметров
 
Приветствую

написал примитивный код передачи параметров методу класса

Код AS3:

        var pObjectsCollider:TMyCollider = new TMyCollider;
        var pData:TMyCollideInfo = new TMyCollideInfo;
 
        var pOldPos:Point = new Point(1,2);
        pData = pObjectsCollider.Collide(pOldPos, pOldPos, g_pWalls[0]);

Код AS3:

package
{               
 
import flash.geom.Point;
 
import TMyCollideInfo;
 
public class TMyCollider
{               
        public function TMyCollider()
        {
        }
 
        // расчитать столкновение с объектом
        public function Collide(pStartPos:Point, pFinishPos:Point, pObject:Object):TMyCollideInfo
        {               
                var pData:TMyCollideInfo = new TMyCollideInfo;
                return pData;
        }
 
}       
 
}

выдает такое

Цитата:

verify TMyCollider/Collide()
stack:
scope: [global Object$ TMyCollider$]
locals: TMyCollider flash.geom::Point? flash.geom::Point? Object? *
0:getlocal0
stack: TMyCollider
scope: [global Object$ TMyCollider$]
locals: TMyCollider flash.geom::Point? flash.geom::Point? Object? *
1:pushscope
stack:
scope: [global Object$ TMyCollider$] TMyCollider
locals: TMyCollider flash.geom::Point? flash.geom::Point? Object? *
2:findpropstrict {,,public,,http://adobe.com/AS3/2006/builtin,TMyCollider,TMyCollider,Object}::TMyCollideInfo
stack: global
scope: [global Object$ TMyCollider$] TMyCollider
locals: TMyCollider flash.geom::Point? flash.geom::Point? Object? *
4:constructprop 49 0
stack: TMyCollideInfo
scope: [global Object$ TMyCollider$] TMyCollider
locals: TMyCollider flash.geom::Point? flash.geom::Point? Object? *
7:coerce TMyCollideInfo
stack: TMyCollideInfo
scope: [global Object$ TMyCollider$] TMyCollider
locals: TMyCollider flash.geom::Point? flash.geom::Point? Object? *
9:dup
VerifyError: Error #1023: Переполнение стека.

at TMyCollider/Collide()
at Arkanoid_fla::MainTimeline/PrepareLevel()
at Arkanoid_fla::MainTimeline/frame1()
причем если сделать функции не 3, а 2 параметра (неважно каких) - ошибок не выдается

Что это за фигня такая? В чем ошибка?

cleptoman 13.07.2009 15:28

g_pWalls[0] - обжект ли?

Zhihar 14.07.2009 15:45

да, MovieClip

wvxvw 14.07.2009 16:10

Пишите круглые скобки после вызова конструктора, не называйте методы как классы...
А вообще, VerifyError значит, что после компиляции код стал неисполняемым. И похоже, что либо вы где-то создали бесконечную рекурсию, либо компилятор так интерпретировал ваш код.

SunShadow 14.07.2009 16:24

Код AS3:

var pObjectsCollider:TMyCollider = new TMyCollider;
        var pData:TMyCollideInfo = new TMyCollideInfo;
 
        var pOldPos:Point = new Point(1,2);
        pData = pObjectsCollider.Collide(pOldPos, pOldPos, g_pWalls[0]);

Судя по всему это у вас вызывается в кадре и кадр циклически проигрывается. Такие вещи надо выносить в классы

Zhihar 14.07.2009 21:32

вопрос чуть не в тему:

а сборщик мусора в AS3 есть?
Т.е. если я каждый кадр делаю

Код AS3:

var pPos:Poin = new Point();

переполнения не будет?

wvxvw 14.07.2009 21:35

да, есть.
Зависит от того, удаляете ли ссылки на объект или нет.

Zhihar 15.07.2009 12:12

т.е. "удалять ссылки на объект"

т.е. мне надо делать

Код AS3:

delete pPos;

в конце?

А как тогда быть с функциями, возвращающие объекты класса

Код AS3:

function Func():TMyClass
{
var pResult:TMyClass = new TMyClass();
return pResult;
}
 
...
 
var pRes:TMyClass = TMyClass();
pRes = Func();
 
...
 
delete [] pRes;

что-то тут не так

wvxvw 15.07.2009 14:48

Код AS3:

var foo:Object = { bar: "bar" };
var bar = foo;
foo = null; // "foo" will not be garbage-collected, one reference remains
bar = null; // "foo" will be marked for garbage-collecting



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

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