Volledige versie bekijken : nieuwe property aanmaken
Jobu
%Europe/Berlin %566 %2005, 14:35
Hallo allemaal,
Bij het includen van een .as file waarin ik een nieuwe Math property heb geplaatst (zie Actionscript Cookbook) krijg ik telkens een error ....
bv. in mijn .as file staat:
Math.degToRad = function(deg){
return (Math.PI * deg) / 180;
}
Verkregen error:
There is no property with the name 'degToRad'.
Alhoewel dat ik nog geen gebruik maak van de Math.degToRad ... dwz dat hij de .as file goed include, en de nieuwe property terugvindt.
Wat doe ik fout?
J
The_One
%Europe/Berlin %601 %2005, 15:26
hoi,
Probeer eens:
Math.prototype.degToRad = function(deg){
return (Math.PI * deg) / 180;
}
Jobu
%Europe/Berlin %625 %2005, 16:00
Nog steeds niets, ik begrijp er niets van ...
Ik open een nieuwe flashfile en paste het volgende erin:
Math.prototype.degToRad = function(deg){
return (Math.PI * deg) / 180;
}
trace (Math.degToRad(90));
Resultaat: een error!! Ook zonder de prototype zoals het in het actionscript Cookbook beschreven staat ...
Fatty Owl
%Europe/Berlin %633 %2005, 16:12
post de error dan ff
Dauntless
%Europe/Berlin %637 %2005, 16:17
It has been a common practice for many Flash developers to toy with the inner classes of ActionScript and add to them new methods and functionality. ActionScript 2.0 now restricts that as many of the internal classes are not set as being dynamic, meaning you cannot add your own methods to them without the compiler throwing an error.
Het werkt misschien nog wel als je publisht naar AS 1.0 / FP6 ...
arshad
%Europe/Berlin %649 %2005, 16:35
misschien heb je hier wat aan...:
object = new Object();
object.__proto__.degToRad = function (deg){
return (Math.PI * deg) / 180;
}
trace (object.degToRad(90));
//geeft 1.5707963267949
trace (_root.degToRad(90));
//geeft ook 1.5707963267949
arshad
%Europe/Berlin %654 %2005, 16:43
trouwens dit werkt ook nog....
Math.__proto__.degToRad = function (deg){
return (Math.PI * deg) / 180;
}
trace (_root.degToRad(90));
//geeft 1.5707963267949
//ipv _root kun je ook een ander object zetten...
Folkert
%Europe/Berlin %660 %2005, 16:50
Beter even een eigen class voor maken met een static method ;)
class MathFF
{
static function degToRad ( deg:Number ):Number
{
return (Math.PI * deg) / 180;
}
}
aanroepen jeGetal = MathFF.degToRad(90);
Roenes
%Europe/Berlin %697 %2005, 17:43
Dauntless, dat citaat van jou klopt wel, maar het is toch ook mogelijk om de classes zelf aan te passen. Volgens mij staan al die class files ergens in een map die je gewoon in bv kladblok kan openen. Als je weet hoe je die kan aanpassen, dan was het volgens mij mogelijk om eigen methodes toe te voegen.
Anyway, ik zag laatst zoiets hier opt forum maar kan het niet meer vinden. Maar volgens mij was het toch mogelijk. (of het was iets wat erop lijkt :D)
Jobu
%Europe/Berlin %700 %2005, 17:48
Bedankt allemaal voor de verschillende methodes die hier gepost werden ...
Ik opteer nu ff voor Arshad zijn methode, die is snel en heel duidelijk voor mij
Alhoewel dat de class van Folkert mij herbruikbare code kan opleveren, en waarschijnlijk een hele goeie manier van programmeren is, ben ik er nog niet uit hoe ik die class moet opslaan (als aparte .as file?? --> is het blijkbaar niet) die ik dan wou includen,
Dan kreeg ik deze error;
**Error** E:\mijnpath\flash\MathFF.as: Line 1: Classes may only be defined in external ActionScript 2.0 class scripts.
class MathFF
zo roep ik ze aan:
#include "MathFF.as"
test = MathFF.degToRad(90);
trace (test);
Dit is waarschijnlijk heel simpel, maar mijn opzoekingswerk leverde ook niets op
Dauntless
%Europe/Berlin %704 %2005, 17:54
Kan je doen... Maar denk eraan, jij alleen kan die code gebruiken, aangezien jij alleen (bv) de Math class hebt aangepast.
Hoe?
----
Ga naar:
C:\Documents and Settings\User\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\Classes . Open daar Math.as met bv kladblok op sepy of Flash zelf natuurlijk.
Daar vind je dit:
//************************************************** **************************
// ActionScript Standard Library
// Math object
//************************************************** **************************
intrinsic class Math
{
static var E:Number;
static var LN10:Number;
static var LN2:Number;
static var LOG10E:Number;
static var LOG2E:Number;
static var PI:Number;
static var SQRT1_2:Number;
static var SQRT2:Number;
static function abs(value:Number):Number;
static function acos(value:Number):Number;
static function asin(value:Number):Number;
static function atan(value:Number):Number;
static function atan2(value1:Number,value2:Number):Number;
static function ceil(value:Number):Number;
static function cos(value:Number):Number;
static function exp(value:Number):Number;
static function floor(value:Number):Number;
static function log(value:Number):Number;
static function max(value1:Number,value2:Number):Number;
static function min(value1:Number,value2:Number):Number;
static function pow(value1:Number,value2:Number):Number;
static function random():Number;
static function round(value:Number):Number;
static function sin(value:Number):Number;
static function sqrt(value:Number):Number;
static function tan(value:Number):Number;
}
Ofwel voeg je je eigen method aan het rijtje toe :
static function degToRad(value:Number):Number; en kan je hem met flash instellen dmv Math.degToRad = function(deg) { //... };
Ofwel voeg je vanboven, voor 'intrinsic' het woord 'dynamic' toe. Dan kan je met dezelfde methode als hierboven functies toevoegen (onbeperkte hoeveelheid :) ).
Maar denk er dus aan: andere mensen zullen een compile error krijgen bij jouw code!!
//EDIT
En als je een class in een externe .as hebt, moet je die niet includen als hij in dezelfde map staat. Dus verwijder die include regel :).
Roenes
%Europe/Berlin %706 %2005, 17:57
Een compile error wel jah, maar als je alleen je swf oid beschikbaar stelt dan maakt het niet uit. Maar dit kan handig zijn als je custom classes wilt maken van bestaande classes (zoals Math of Date). Je kunt natuurlijk ook die classes gewoon extenden maar dan krijg je dus classnamen als MathFF of whatever terwijl Math fijner is.
Achjah, meerdere methodes, het blijft toch je eigen keuze :)
Jobu
%Europe/Berlin %717 %2005, 18:12
Okaaay!! Dit verduidelijkt heel veel!!
Ik zal maar braafjes van de bestaande Math class blijven :)
en liefst een externe as file gebruiken (bedankt voor de tip van het weglaten van de include :I )
Groetjes, en nogmaals bedankt, want ik liep hier al als een gek rond omdat ik het probleem niet zelf kon oplossen :eek: ;)
Folkert
%Europe/Berlin %822 %2005, 20:44
(zoals Math of Date). Je kunt natuurlijk ook die classes gewoon extenden maar dan krijg je dus classnamen als MathFF of whatever terwijl Math fijner is.
Date en math zijn niet echt vergelijkbaar buiten dat beide build-in zijn. Date kan je simpel extenden Math niet ;) De buildin classes aanpassen is niet echt the way to go zeker niet voor een simpel iets als dit. Maar goed dat blijft eigen keuze natuurlijk. En als je een class include dan gebruik je import en niet include ;) (verder is voor dezelfde map indeed onzin)
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.