-
[F8] sortOn() doesn't work!
I'm trying to make a sorted array of an existing array full of objects.
The constructor for the object is the following:
PHP Code:
function Organ(organ:String, layer:Number, name:String, info:String) {
var path:String;
var dummy_mc:Object;
if (layer == 0) {
path = "skin_mc";
}
else if (layer == 1) {
path = "muscles_mc";
}
else if (layer == 2) {
path = "cardio_mc";
}
else if (layer == 3) {
path = "bones_mc";
}
else {
path = "_parent";
}
this = _root.body_mc[path][organ];
this.type = "Organ";
this.active = false;
this.blur = true;
this.layer = layer;
this.name = name;
this.info = info;
var overFilter:GlowFilter = new GlowFilter(0xFF0000, 0, 0, 0, 2, 3, false, false);
var overFilters:Array = new Array(overFilter);
this.filters = overFilters;
//Dummy creation
dummy_mc = _root.dummy_mc[path][organ];
dummy_mc.type = "Organ";
dummy_mc.name = this.name;
dummy_mc.active = this.active;
dummy_mc.blur = this.blur;
dummy_mc.filters = overFilters;
this.dummy = dummy_mc;
//FIRST LEVEL FUNCTION ASSIGNMENT
this.onRollOver = RollOverAnimation;
this.onRollOut = RollOutAnimation;
this.onPress = ProcessOrgan;
Organ_array.push(this);
}
i create these 4 objects, notice the name property is the third argument:
PHP Code:
createOrgan("heart_mc", 2, "Heart", "Pumps blood.");
createOrgan("skull_mc", 3, "Skull", "Bonestructure for protecting the brain");
createOrgan("heart_mc", 4, "HeartHeartHeartHeartHeart", "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean sit amet ligula nec tellus convallis luctus. Curabitur sit amet nulla et eros molestie lacinia. Etiam ac purus in leo tempus ornare. Morbi eget felis. Phasellus neque. Morbi at libero. Praesent sapien. Aliquam lacus odio, porta dapibus, nonummy id, pulvinar et, neque. In tempus nisi id diam. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur euismod. Morbi bibendum. Suspendisse blandit blandit enim. Maecenas tristique, sapien ut mollis dapibus, lorem massa mattis nunc, vitae euismod velit est sed metus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras non ipsum. Pellentesque luctus, arcu in porta ultricies, nulla tortor nonummy lorem, ac pretium mi leo a arcu. Curabitur tellus. Cras porta interdum odio. In et nibh.");
createOrgan("qkull_mc", 4, "SkullySkullySkullySkullySkully", "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean sit amet ligula nec tellus convallis luctus. Curabitur sit amet nulla et eros molestie lacinia. Etiam ac purus in leo tempus ornare. Morbi eget felis. Phasellus neque. Morbi at libero. Praesent sapien. Aliquam lacus odio, porta dapibus, nonummy id, pulvinar et, neque. In tempus nisi id diam. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur euismod. Morbi bibendum. Suspendisse blandit blandit enim. Maecenas tristique, sapien ut mollis dapibus, lorem massa mattis nunc, vitae euismod velit est sed metus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras non ipsum. Pellentesque luctus, arcu in porta ultricies, nulla tortor nonummy lorem, ac pretium mi leo a arcu. Curabitur tellus. Cras porta interdum odio. In et nibh.");
then i use the following code to sort the Organ_array where they are pushed in:
PHP Code:
var char_array:Array = new Array();
var firstString:String;
//vars for arrays
var sorted_array:Array = new Array();
sorted_array = Organ_array.sortOn("name");
var items:Number = sorted_array.length;
var itemWidth:Number = (this._width - 2) / items;
var start:Number = 0 - (0.5 * itemWidth * (items - 1));
var item:MovieClip;
var b:Boolean = false;
for (var k:Number = 0; k < sorted_array.length; k++) {
trace(sorted_array[k].name);
}
but the traces always return:
PHP Code:
Skull
Heart
HeartHeartHeartHeartHeart
SkullySkullySkullySkullySkully
so anybody has any idea whats going on. im positive im using the method the right way.
-
FK'n_dog
i threw this at a test file and the results appear OK
can you make use of the method ?
PHP Code:
var Organ_array:Array = new Array();
var sorted_array:Array = new Array();
function createOrgan(organ:String, layer:Number, name:String, info:String) {
obj = {};
obj.type = "Organ";
obj.clip = organ;
obj.layer = layer;
obj.name = name;
obj.info = info;
Organ_array.push(obj);
};
createOrgan("heart_mc", 2, "Heart", "Pumps blood.");
createOrgan("skull_mc", 3, "Skull", "Bonestructure");
createOrgan("heart_mc", 4, "HeartHeart", "Lorem ipsum");
createOrgan("qkull_mc", 4, "SkullySkull", "Lorem ipsum dolor");
sorted_array = Organ_array.concat();
sorted_array.sortOn("name");
for (var k:Number = 0; k < sorted_array.length; k++) {
trace(sorted_array[k].name);
}
/* output -
Heart
HeartHeart
Skull
SkullySkull
*/
-
Ty for looking into this,
unfortunatly it didn't sort out the problem
i tried everything but it just won't sort on the name field. i ran the debug, and even in there everything was perfect!
so i'm really clueless now
here's the shortened version of the code code, can anybody spot why the sortOn method gives faulty returns?
PHP Code:
import flash.filters.GlowFilter;
//VARIABLES
//
//
//0 = skin, 1 = muscles, 2 = cardiovascular, 3 = nerves
var body:Number = 0;
//depths voor organs
var depth:Number = 100;
var mouseListener:Object = new Object();
var mgScroller:Object = new Object();
var Organ_array:Array = new Array();
//FUNCTIONS
//
//
//ORGAN CONSTRUCTOR
function createOrgan(organ:String, layer:Number, name:String, info:String):Void {
var organ:Object = new Organ(organ, layer, name, info);
}
function Organ(organ:String, layer:Number, name:String, info:String) {
var path:String;
var dummy_mc:Object;
if (layer == 0) {
path = "skin_mc";
}
else if (layer == 1) {
path = "muscles_mc";
}
else if (layer == 2) {
path = "cardio_mc";
}
else if (layer == 3) {
path = "bones_mc";
}
else {
path = "_parent";
}
this = _root.body_mc[path][organ];
this.type = "Organ";
this.active = false;
this.blur = true;
this.layer = layer;
this.name = name;
this.info = info;
var overFilter:GlowFilter = new GlowFilter(0xFF0000, 0, 0, 0, 2, 3, false, false);
var overFilters:Array = new Array(overFilter);
this.filters = overFilters;
//Dummy creation
dummy_mc = _root.dummy_mc[path][organ];
dummy_mc.type = "Organ";
dummy_mc.name = this.name;
dummy_mc.active = this.active;
dummy_mc.blur = this.blur;
dummy_mc.filters = overFilters;
this.dummy = dummy_mc;
//FIRST LEVEL FUNCTION ASSIGNMENT
this.onRollOver = RollOverAnimation;
this.onRollOut = RollOutAnimation;
this.onPress = ProcessOrgan;
Organ_array.push(this);
}
function ProcessOrgan():Void {
//SECOND SUB LEVEL FUNCTION ASSIGNMENT
Activate.apply(this);
setTitleText.apply(this);
setContentText.apply(this);
}
//LEVEL TRANSITION FUNCTIONS
//
//
function transitionInitialize():Void {
_root.body_mc.muscles_mc._visible = false;
_root.body_mc.cardio_mc._visible = false;
_root.body_mc.bones_mc._visible = false;
_root.dummy_mc.muscles_mc._visible = false;
_root.dummy_mc.cardio_mc._visible = false;
_root.dummy_mc.bones_mc._visible = false;
}
function fadeOut():Void {
var k = 100;
this.onEnterFrame = function() {
k -= 5;
this._alpha = k;
if (k <= 0) {
this._visible = false;
delete this.onEnterFrame;
}
};
}
function fadeIn():Void {
var k = 0;
this._alpha = k;
this._visible = true;
this.onEnterFrame = function() {
k += 5;
this._alpha = k;
if (k >= 100) {
this._alpha = 100;
delete this.onEnterFrame;
}
};
}
function bodyLevel():Void {
if (_root.LevelScroller_mc.BodyIndicator.lock == false) {
switch (body) {
//SECOND SUB LEVEL FUNCTION ASSIGNMENT
case 0 :
fadeIn.apply(_root.dummy_mc.skin_mc);
fadeOut.apply(_root.dummy_mc.muscles_mc);
fadeOut.apply(_root.dummy_mc.cardio_mc);
fadeOut.apply(_root.dummy_mc.bones_mc);
break;
case 1 :
fadeOut.apply(_root.dummy_mc.skin_mc);
fadeIn.apply(_root.dummy_mc.muscles_mc);
fadeOut.apply(_root.dummy_mc.cardio_mc);
fadeOut.apply(_root.dummy_mc.bones_mc);
break;
case 2 :
fadeOut.apply(_root.dummy_mc.skin_mc);
fadeOut.apply(_root.dummy_mc.muscles_mc);
fadeIn.apply(_root.dummy_mc.cardio_mc);
fadeOut.apply(_root.dummy_mc.bones_mc);
break;
case 3 :
fadeOut.apply(_root.dummy_mc.skin_mc);
fadeOut.apply(_root.dummy_mc.muscles_mc);
fadeOut.apply(_root.dummy_mc.cardio_mc);
fadeIn.apply(_root.dummy_mc.bones_mc);
break;
}
}
}
function mgLevel():Void {
if (_root.LevelScroller_mc.MGIndicator.lock == false) {
switch (body) {
//SECOND SUB LEVEL FUNCTION ASSIGNMENT
case 0 :
fadeIn.apply(_root.body_mc.skin_mc);
fadeOut.apply(_root.body_mc.muscles_mc);
fadeOut.apply(_root.body_mc.cardio_mc);
fadeOut.apply(_root.body_mc.bones_mc);
break;
case 1 :
fadeOut.apply(_root.body_mc.skin_mc);
fadeIn.apply(_root.body_mc.muscles_mc);
fadeOut.apply(_root.body_mc.cardio_mc);
fadeOut.apply(_root.body_mc.bones_mc);
break;
case 2 :
fadeOut.apply(_root.body_mc.skin_mc);
fadeOut.apply(_root.body_mc.muscles_mc);
fadeIn.apply(_root.body_mc.cardio_mc);
fadeOut.apply(_root.body_mc.bones_mc);
break;
case 3 :
fadeOut.apply(_root.body_mc.skin_mc);
fadeOut.apply(_root.body_mc.muscles_mc);
fadeOut.apply(_root.body_mc.cardio_mc);
fadeIn.apply(_root.body_mc.bones_mc);
break;
}
}
}
//TEXTFIELDS FUNCTION
//
//
function textFieldInitialize(color:Number):Void {
var tfTitle:TextFormat = new TextFormat(null, 22);
var tfContent:TextFormat = new TextFormat(null, 12);
var indicatorDownColor:Color = new Color(this.textBoxContent_mc.scrollDown_mc.indicator_mc);
var indicatorUpColor:Color = new Color(this.textBoxContent_mc.scrollUp_mc.indicator_mc);
this.textBoxContent_mc.title_txt.wordWrap = false;
this.textBoxContent_mc.title_txt.multiline = false;
this.textBoxContent_mc.title_txt.textColor = color;
this.textBoxContent_mc.title_txt.selectable = false;
this.textBoxContent_mc.title_txt.setNewTextFormat(tfTitle);
this.textBoxContent_mc.content_txt.wordWrap = true;
this.textBoxContent_mc.content_txt.multiline = true;
this.textBoxContent_mc.content_txt.textColor = color;
this.textBoxContent_mc.content_txt.selectable = false;
this.textBoxContent_mc.content_txt.setNewTextFormat(tfContent);
indicatorDownColor.setRGB(color);
indicatorUpColor.setRGB(color);
this.textBoxContent_mc.scrollDown_mc._visible = false;
this.textBoxContent_mc.scrollUp_mc._visible = false;
//SECOND SUB LEVEL FUNCTION ASSIGNMENT
this.textBoxContent_mc.onEnterFrame = updateScroll;
//STARTING TEXT
var dummy:Object = new Object();
dummy.name = "Welcome to BodyCheck v1.0";
dummy.type = "Organ";
dummy.info = "This is the body parts panel. Information of selected body parts will be displayed here.\n\nUse the magnifying glass on the dummy, or use the body parts piece bar below to select a body part. Use your scroll to cycle through the different layers of the human body.";
setTitleText.apply(dummy);
setContentText.apply(dummy);
}
function setTitleText():Void {
var tf:TextField;
if (this.type == "Organ") {
tf = _root.organTextBox_mc.textBoxContent_mc.title_txt;
tf.text = this.name;
while (tf.maxhscroll > 0) {
var tfTitle:TextFormat = tf.getTextFormat();
tfTitle.size--;
tf.setTextFormat(tfTitle);
}
}
}
function setContentText():Void {
var tf:TextField;
if (this.type == "Organ") {
tf = _root.organTextBox_mc.textBoxContent_mc.content_txt;
tf.text = this.info;
//SECOND SUB LEVEL FUNCTION ASSIGNMENT
checkScroll.apply(tf, [tf]);
}
}
function checkScroll(tf:TextField):Void {
if (tf.maxscroll > 1) {
tf._parent.scrollDown_mc._visible = true;
tf._parent.scrollUp_mc._visible = true;
}
else {
tf._parent.scrollDown_mc._visible = false;
tf._parent.scrollUp_mc._visible = false;
}
}
function updateScroll():Void {
this.scrollUp_mc._alpha = (((this.content_txt.scroll - 1) / (this.content_txt.maxscroll - 1)) * 100);
this.scrollDown_mc._alpha = (100 - (((this.content_txt.scroll - 1) / (this.content_txt.maxscroll - 1)) * 100));
this.scrollUp_mc.onPress = function() {
this.onEnterFrame = function() {
this._parent.content_txt.scroll--;
};
};
this.scrollUp_mc.onRelease = function() {
delete this.onEnterFrame;
};
this.scrollUp_mc.onReleaseOutside = function() {
delete this.onEnterFrame;
};
this.scrollDown_mc.onPress = function() {
this.onEnterFrame = function() {
this._parent.content_txt.scroll++;
};
};
this.scrollDown_mc.onRelease = function() {
delete this.onEnterFrame;
};
this.scrollDown_mc.onReleaseOutside = function() {
delete this.onEnterFrame;
};
}
//SCROLLBAR FUNCTIONS
//
//
function scrollBarInitialize(type:String, sort:String, activeC:Number, inactiveC:Number):Void {
if ((type == "Organ") && (sort == "Alphabetic")) {
//vars for placing letters
var char_array:Array = new Array();
var firstString:String;
//vars for arrays
var sorted_array:Array = new Array();
//sorted_array = Organ_array.sortOn("name");
var items:Number = sorted_array.length;
var itemWidth:Number = (this._width - 2) / items;
var start:Number = 0 - (0.5 * itemWidth * (items - 1));
var item:MovieClip;
var b:Boolean = false;
//for (var k:Number = 0; k < sorted_array.length; k++) {
//trace(sorted_array[k].name);
//}
for (var i:Number = 0; i < items; i++) {
item = this.scrollBarFill_mc.attachMovie("ScrollItem", "ScrollItem" + i, 200 + i, {_width:itemWidth, _x:start, _y:1});
//SECOND SUB LEVEL FUNCTION ASSIGNMENT
/*b = false;
firstString = sorted_array[i].name.charAt(0);
for (var j:Number = 0; j < char_array.length; j++) {
if (firstString == char_array[j]) {
b = true;
}
}
if (b == false) {
var mc:MovieClip = this.attachMovie("ScrollLetter", "ScrollLetter", depth, {_x:item._x});
mc.letter_txt.text = firstString;
trace("created " + firstString + " on " + mc._x);
char_array.push(firstString);
}*/
scrollBarItemInitialize.apply(item, [sorted_array[i], activeC, inactiveC]);
start += itemWidth;
}
}
else {
trace("error");
}
}
function scrollBarItemInitialize(obj:Object, activeC:Number, inactiveC:Number):Void {
var inactiveColor:Color = new Color(this);
var activeColor:Color = new Color(this);
var reset:Boolean = false;
inactiveColor.setRGB(activeC);
this._alpha = 25;
//THIRD SUB LEVEL FUNCTION ASSIGNMENT
this.onRollOver = function() {
this._alpha = 50;
RollOverAnimation.apply(obj);
};
this.onRollOut = function() {
this._alpha = 25;
RollOutAnimation.apply(obj);
};
this.onPress = function() {
ProcessOrgan.apply(obj);
};
this.onEnterFrame = function() {
if (obj.active == true) {
this._alpha = 100;
delete this.onRollOver;
delete this.onRollOut;
reset = false;
}
else if ((obj.active == false) && (reset == false)) {
this._alpha = 25;
reset = true;
}
else {
this.onRollOver = function() {
this._alpha = 50;
RollOverAnimation.apply(obj);
};
this.onRollOut = function() {
this._alpha = 25;
RollOutAnimation.apply(obj);
};
}
};
}
//MAIN CODE
//
//
Mouse.addListener(mouseListener);
//ORGANS OBJECTS
createOrgan("heart_mc", 2, "Heart", "Pumps blood.");
createOrgan("skull_mc", 3, "Skull", "Bonestructure for protecting the brain");
createOrgan("heart_mc", 4, "HeartHeartHeartHeartHeart", "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean sit amet ligula nec tellus convallis luctus. Curabitur sit amet nulla et eros molestie lacinia. Etiam ac purus in leo tempus ornare. Morbi eget felis. Phasellus neque. Morbi at libero. Praesent sapien. Aliquam lacus odio, porta dapibus, nonummy id, pulvinar et, neque. In tempus nisi id diam. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur euismod. Morbi bibendum. Suspendisse blandit blandit enim. Maecenas tristique, sapien ut mollis dapibus, lorem massa mattis nunc, vitae euismod velit est sed metus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras non ipsum. Pellentesque luctus, arcu in porta ultricies, nulla tortor nonummy lorem, ac pretium mi leo a arcu. Curabitur tellus. Cras porta interdum odio. In et nibh.");
createOrgan("qkull_mc", 4, "SkullySkullySkullySkullySkully", "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean sit amet ligula nec tellus convallis luctus. Curabitur sit amet nulla et eros molestie lacinia. Etiam ac purus in leo tempus ornare. Morbi eget felis. Phasellus neque. Morbi at libero. Praesent sapien. Aliquam lacus odio, porta dapibus, nonummy id, pulvinar et, neque. In tempus nisi id diam. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Curabitur euismod. Morbi bibendum. Suspendisse blandit blandit enim. Maecenas tristique, sapien ut mollis dapibus, lorem massa mattis nunc, vitae euismod velit est sed metus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras non ipsum. Pellentesque luctus, arcu in porta ultricies, nulla tortor nonummy lorem, ac pretium mi leo a arcu. Curabitur tellus. Cras porta interdum odio. In et nibh.");
//SCROLLER OBJECTS
createScroller(_root.LevelScroller_mc, "BodyIndicator");
createScroller(_root.LevelScroller_mc, "MGIndicator");
//INITIALIZATIONS/FIRST LEVEL FUNCTION ASSIGNMENT
mouseTrack("mg");
textFieldInitialize.apply(_root.organTextBox_mc, [0xFF0000]);
textFieldInitialize.apply(_root.diseaseTextBox_mc, [0x0000FF]);
scrollBarInitialize.apply(_root.organAlphabeticScroller_mc, ["Organ", "Alphabetic", 0xFF0000, 0x00FFFF]);
transitionInitialize();
scollerIndicator();
//TESTING
//
//
//this.onEnterFrame = function() {
//trace(_root.organTextBox_mc.textBoxContent_mc.content_txt.scroll + "/" + _root.organTextBox_mc.textBoxContent_mc.content_txt.maxscroll);
//};
Organ_array.sortOn("name");
for (var k:Number = 0; k < Organ_array.length; k++) {
trace(Organ_array[k].name);
}
-
sooooo i found some interesting stuff regarding this most irritating issue
i traced the 'objects' and it seems, i'm not dealing with objects (that's a nasty suprise to find out when working several weeks on this ). it looks like im dealing with movieclips, but with several added properties.
i came to this conclusion when i traced the content of the Organ_array. when dealing with objects, the traces always output [Object object]. but the Organ_array outputs movieclip paths!
PHP Code:
for (var k:Number = 0; k < Organ_array.length; k++) {
trace(Organ_array[k]);
}
trace(" ");
Organ_array.sortOn("name");
for (var k:Number = 0; k < Organ_array.length; k++) {
trace(Organ_array[k]);
}
generates the following outputs:
PHP Code:
_level0.body_mc.cardio_mc.heart_mc
_level0.body_mc.bones_mc.skull_mc
_level0.heart_mc
_level0.aqkull_mc
_level0.aqkull_mc
_level0.body_mc.bones_mc.skull_mc
_level0.body_mc.cardio_mc.heart_mc
_level0.heart_mc
so i think i must eeehmmm tunr my movieclips into objects?? is it possible to attach a graphic appearance of a movieclip to an object??
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|