MUCHAS gracias malee. another good soul to add to my xmas card list. :)
cheers.
Printable View
MUCHAS gracias malee. another good soul to add to my xmas card list. :)
cheers.
malee 1, artlink 0.
:D
350 mil comming my way baby
Here's a chance for another point on artlink.
I'm creating buckets one on top of the other with the statement below. If "numOfBuckets" is set to a value greater than 4 I'd like to wrap them to another "line"/ x value, but my code isn't working.
I've tried a bunch of different methods, but nothing works.Code:bx = 350;
for (var i = 0; i < numOfBuckets; i++) {
while (i >= 5 ){
bx=500;
}
var myBucket = this.attachMovie("bucketMC", "bucket" + i, i, {_x:bx, _y:20 + (130 * i)});
myBucket.btnRemove1._visible = false;
myBucket.btnRemove1.onPress = doRemove1;
myBucket.btnRemoveAll._visible = false;
myBucket.btnRemoveAll.onPress = doRemoveAll;
myBucket.txtCT.text = "";
myBucket.CT = 0;
myBucket.myLabel.text = labelArray[i];
}
Ok guys I answered my own question. Here's what I did in case you care.
Thanks to you guys this newbie's learning. :)Code:for (var i = 0; i < 4; i++) {
var myBucket = this.attachMovie("bucketMC", "bucket" + i, i, {_x:bx, _y:20 + (130 * i)});
myBucket.btnRemove1._visible = false;
myBucket.btnRemove1.onPress = doRemove1;
myBucket.btnRemoveAll._visible = false;
myBucket.btnRemoveAll.onPress = doRemoveAll;
myBucket.txtCT.text = "";
myBucket.CT = 0;
myBucket.myLabel.text = labelArray[i];
}
for (var i = 4; i < numOfBuckets ; i++) {
var myBucket = this.attachMovie("bucketMC", "bucket" + i, i, {_x:550, _y:-500 + (130 * i)});
myBucket.btnRemove1._visible = false;
myBucket.btnRemove1.onPress = doRemove1;
myBucket.btnRemoveAll._visible = false;
myBucket.btnRemoveAll.onPress = doRemoveAll;
myBucket.txtCT.text = "";
myBucket.CT = 0;
myBucket.myLabel.text = labelArray[i];
}
well you could have just gone
Code:var bx = 350
for (var i = 0; i < 4; i++) {
if(i > 4) bx = 550
var myBucket = this.attachMovie("bucketMC", "bucket" + i, i, {_x:bx, _y:20 + (130 * i)});
myBucket.btnRemove1._visible = false;
myBucket.btnRemove1.onPress = doRemove1;
myBucket.btnRemoveAll._visible = false;
myBucket.btnRemoveAll.onPress = doRemoveAll;
myBucket.txtCT.text = "";
myBucket.CT = 0;
myBucket.myLabel.text = labelArray[i];
}
Quite true malee, thanks.
I'm having another problem with my hittest statement. When the user drops a coin(s) into a bucket, a mini version of the coin MC is created and placed inside the bucket. I tried altering the hittest to perform an OR condition to include the myMini coins as well as the bucket itself in this hittest, but it's not working. Here's what I have:
I can't figure out how to reference the mini coin MC in the OR hittest to make this work.Code:function makeMini(mc) {
var CT = mc.CT;
var xPos = 28;
var yPos = 80;
var mHolder = mc.createEmptyMovieClip("mHolder", 1);
for (var i = 0; i < CT; i++) {
var myMini = mHolder.attachMovie("coinMC", "coin" + +i, i);
myMini._xscale = myMini._yscale = 30;
myMini._x = xPos;
myMini._y = yPos - ((yOffset * 36) / 100) * i;
}
}
function makeStack() {
var xPos = 20;
var yPos = (stacknumber - stack.length * yOffset) + 460;
for (var i = stack.length - 1; i >= 0; i--) {
var myCoin = attachMovie("coinMC", "coin" + i, i + 1000, {_x:xPos, _y:yPos});
myCoin.num = i;
myCoin.sX = xPos;
myCoin.sY = yPos;
yPos += yOffset;
myCoin.onPress = function() {
this.startDrag();
this.onMouseMove = function() {
var nyPos = this._y;
for (var j = stack.length - 1; j > this.num; j--) {
var aCoin = this._parent["coin" + j];
aCoin._x = this._x;
nyPos -= yOffset;
aCoin._y = nyPos;
}
};
};
myCoin.onRelease = function() {
stopDrag();
delete this.onMouseMove;
if (eval(this._droptarget).bucket._name == "bucket") {
var num = this.num;
hit.start();
for (var t = 0; t < numOfBuckets; t++) {
var myBucket = this._parent["bucket" + t];
if ((this.hitTest(myBucket.bucket))||(this.hitTest(myBucket.myMini))) {
myBucket.CT += (stack.length - num);
myBucket.txtCT.text = myBucket.CT;
myBucket.btnRemove1._visible = true;
myBucket.btnRemoveAll._visible = true;
makeMini(myBucket);
//coinAnimate(myBucket);
//trace(labelArray[t]+" "+myBucket.CT);
traceText.trace.text = (labelArray[t]+" "+myBucket.CT);
traceText.play(2);
break;
}
}
for (var j = stack.length - 1; j > num; j--) {
var aCoin = this._parent["coin" + j];
aCoin.removeMovieClip();
}
this.removeMovieClip();
stack.splice(num);
} else {
for (var j = stack.length - 1; j >= this.num; j--) {
var aCoin = this._parent["coin" + j];
aCoin._x = aCoin.sX;
aCoin._y = aCoin.sY;
}
}
};
}
}
Code:myCoin.onRelease = function() {
stopDrag();
delete this.onMouseMove;
var meHit = false;
var num = this.num;
for (var t = 0; t < numOfBuckets; t++) {
var myBucket = this._parent["bucket" + t];
if ((this.hitTest(myBucket.bucket)) || (this.hitTest(myBucket.mHolder))) {
hit.start();
myBucket.CT += (stack.length - num);
myBucket.txtCT.text = myBucket.CT;
myBucket.btnRemove1._visible = true;
myBucket.btnRemoveAll._visible = true;
makeMini(myBucket);
//coinAnimate(myBucket);
//trace(labelArray[t]+" "+myBucket.CT);
traceText.trace.text = (labelArray[t] + " " + myBucket.CT);
traceText.play(2);
meHit = true;
break;
}
}
if (meHit) {
for (var j = stack.length - 1; j > num; j--) {
var aCoin = this._parent["coin" + j];
aCoin.removeMovieClip();
}
this.removeMovieClip();
stack.splice(num);
} else {
for (var j = stack.length - 1; j >= this.num; j--) {
var aCoin = this._parent["coin" + j];
aCoin._x = aCoin.sX;
aCoin._y = aCoin.sY;
}
}
};
Thanks dawson, that worked like a charm as always.
I'm having a hard time coming up with a doRemoveGlobal() function to go along with the others, so that all coins in the buckets can be replaced to the main stack. Something like this?
...or do I have to create a new variable, keep track of it each time a coin(s) is dropped, and reference that in this function?Code:function doRemoveGlobal() {
while (myCoin.CT > 0) {
stack.push(stack.length + (stacknumber - stack.length));
}
//trace(stack.length);
rem.start();
makeStack();
makeMini();
myBucket.txtCT.text = "";
this._parent._visible = false;
btnRemove1._visible = false;
}
//button control on stage
removeGlobal.onRelease = function() {
doRemoveGlobal();
}
Code://
stop();
var yOffset = 22;
var hit = new Sound();
hit.attachSound("kerching");
var rem = new Sound();
rem.attachSound("click");
var stacknumber = Number(stackNumb);
if (!stacknumber) {
stacknumber = 10;
}
var numOfBuckets = 4;
var labelArray = new Array("porsche", "ferrari", "ford", "chevy");
var stack = new Array(stacknumber);
//
function makeBuckets() {
for (var i = 0; i < numOfBuckets; i++) {
var offX = (i >= 4) ? 550 : 350;
var offY = (i >= 4) ? 20 + (130 * (i - 4)) : 20 + (130 * i);
var myBucket = this.attachMovie("bucketMC", "bucket" + i, i, {_x:offX, _y:offY});
myBucket.btnRemove1._visible = false;
myBucket.btnRemove1.onPress = doRemove1;
myBucket.btnRemoveAll._visible = false;
myBucket.btnRemoveAll.onPress = doRemoveAll;
myBucket.txtCT.text = "";
myBucket.CT = 0;
myBucket.myLabel.text = labelArray[i];
}
}
function makeMini(mc) {
var CT = mc.CT;
var xPos = 130;
var yPos = 40;
var mHolder = mc.createEmptyMovieClip("mHolder", 1);
for (var i = 0; i < CT; i++) {
var myMini = mHolder.attachMovie("coinMC", "coin" + +i, i);
myMini._xscale = myMini._yscale = 20;
myMini._x = xPos;
myMini._y = yPos - ((yOffset * 20) / 100) * i;
}
mHolder.onPress = function() {
trace(this);
};
}
function makeStack() {
var xPos = 20;
var yPos = (stacknumber - stack.length * yOffset) + 460;
for (var i = stack.length - 1; i >= 0; i--) {
var myCoin = attachMovie("coinMC", "coin" + i, i + 1000, {_x:xPos, _y:yPos});
myCoin.num = i;
myCoin.sX = xPos;
myCoin.sY = yPos;
yPos += yOffset;
myCoin.onPress = function() {
this.startDrag();
this.onMouseMove = function() {
var nyPos = this._y;
for (var j = stack.length - 1; j > this.num; j--) {
var aCoin = this._parent["coin" + j];
aCoin._x = this._x;
nyPos -= yOffset;
aCoin._y = nyPos;
}
};
};
myCoin.onRelease = function() {
stopDrag();
delete this.onMouseMove;
var meHit = false;
var num = this.num;
for (var t = 0; t < numOfBuckets; t++) {
var myBucket = this._parent["bucket" + t];
if ((this.hitTest(myBucket.bucket)) || (this.hitTest(myBucket.mHolder))) {
hit.start();
myBucket.CT += (stack.length - num);
myBucket.txtCT.text = myBucket.CT;
myBucket.btnRemove1._visible = true;
myBucket.btnRemoveAll._visible = true;
makeMini(myBucket);
//coinAnimate(myBucket);
//trace(labelArray[t]+" "+myBucket.CT);
traceText.trace.text = (labelArray[t] + " " + myBucket.CT);
traceText.play(2);
meHit = true;
break;
}
}
if (meHit) {
for (var j = stack.length - 1; j > num; j--) {
var aCoin = this._parent["coin" + j];
aCoin.removeMovieClip();
}
this.removeMovieClip();
stack.splice(num);
} else {
for (var j = stack.length - 1; j >= this.num; j--) {
var aCoin = this._parent["coin" + j];
aCoin._x = aCoin.sX;
aCoin._y = aCoin.sY;
}
}
};
}
}
function doRemove1() {
this._parent.txtCT.text = --this._parent.CT;
stack.push(stack.length + 1);
rem.start();
makeStack();
makeMini(this._parent);
if (this._parent.CT == 0) {
this._parent.txtCT.text = "";
this._visible = false;
this._parent.btnRemoveAll._visible = false;
}
}
function doRemoveAll() {
while (this._parent.CT > 0) {
this._parent.txtCT.text = --this._parent.CT;
stack.push(stack.length + 1);
}
rem.start();
makeStack();
makeMini(this._parent);
this._parent.txtCT.text = "";
this._visible = false;
this._parent.btnRemove1._visible = false;
}
function doInit() {
stack = new Array(stacknumber);
rem.start();
makeBuckets();
makeStack();
}
btnReset.onPress = doInit;
//
doInit();
//
Ok, I'm back with more on this. I'm attempting to add the ability to allow users to drag and drop mini coins (those dropped into the buckets) from bucket to bucket. I've got the drag part down, but the drop is a problem.
1st of all I can't figure out the proper hittest syntax for it, and 2nd there is a level problem with the bucket movie clips covering the mini coins as you drag them. I'm afraid I will have to rewrite the entire "make bucket" section because of this.
There's a link below to the app so you can see it in action, and what's going wrong.
Also, I'm brainstorming for ways to handle stacking and displaying more than 20+ regular coins in the main stack. As you can see there's only room for around 20, and I'd love to be able to hold/show up to 100. I've started laying out plans to stack 20 in view and show a "plus/more" graphic if there are more available.
Any thoughts on how to handle this more efficiently?
http://www.porper.net/ix/flash/coinAllocation.html
Code://
stop();
clickRemoveGlobal._visible=false;
var nb:Number;
if (!nb){
nb=12;
}
bx=250;
var stacknumber = Number(stacknumber);
if (!stacknumber){
stacknumber=12;
}
var yOffset = 22;
var hit = new Sound();
hit.attachSound("kerching");
var rem = new Sound();
rem.attachSound("click");
if (!labelstring) {
labelstring="porsche,ferrari,ford,chevy,toyota,bentley,cooper,hummer,honda,mustang,el camino,corvair";
}
var numOfBuckets = nb;
var labelArray:Array = labelstring.split(",");
var stack:Array = Array(stacknumber);
function makeBuckets() {
for (var i = 0; i < numOfBuckets; i++) {
var myBucket = this.attachMovie("bucketMC", "bucket" + i, i, {_x:bx, _y:20 + (130 * i)});
myBucket.btnRemove1._visible = false;
myBucket.btnRemove1.onPress = doRemove1;
myBucket.btnRemoveAll._visible = false;
myBucket.btnRemoveAll.onPress = doRemoveAll;
myBucket.txtCT.text = "";
myBucket.CT = 0;
myBucket.myLabel.text = labelArray[i];
}
if (nb > 4) {
for (var i = 4; i < numOfBuckets; i++) {
var myBucket = this.attachMovie("bucketMC", "bucket" + i, i, {_x:430, _y:-500 + (130 * i)});
myBucket.btnRemove1._visible = false;
myBucket.btnRemove1.onPress = doRemove1;
myBucket.btnRemoveAll._visible = false;
myBucket.btnRemoveAll.onPress = doRemoveAll;
myBucket.txtCT.text = "";
myBucket.CT = 0;
myBucket.myLabel.text = labelArray[i];
}
for (var i = 8; i < numOfBuckets; i++) {
var myBucket = this.attachMovie("bucketMC", "bucket" + i, i, {_x:610, _y:-1020 + (130 * i)});
myBucket.btnRemove1._visible = false;
myBucket.btnRemove1.onPress = doRemove1;
myBucket.btnRemoveAll._visible = false;
myBucket.btnRemoveAll.onPress = doRemoveAll;
myBucket.txtCT.text = "";
myBucket.CT = 0;
myBucket.myLabel.text = labelArray[i];
}
}
}
function makeMini(mc) {
var CT = mc.CT;
var miniArray = new Array(CT);
var xPos = 28;
var yPos = 80;
var mHolder = mc.createEmptyMovieClip("mHolder", 1);
for (var i = 0; i < CT; i++) {
var myMini = mHolder.attachMovie("coinMC", "minicoin" + +i, i);
myMini._xscale = myMini._yscale = 30;
myMini._x = xPos;
myMini._y = yPos - ((yOffset * 36) / 100) * i;
myMini.num = i;
myMini.sX = xPos;
myMini.sY = yPos - ((yOffset * 36) / 100) * i;
myMini.onPress = function() {
trace(miniArray.length-this.num);
this.startDrag();
this.onMouseMove = function() {
var nyPos = this._y;
for (var j = miniArray.length - 1; j > this.num; j--) {
var aCoin = this._parent["minicoin" + j];
aCoin._x = this._x;
nyPos -= yOffset-13;
aCoin._y = nyPos;
}
};
};
myMini.onRelease = function() {
stopDrag();
delete this.onMouseMove;
var meHit = false;
var num = this.num;
for (var t = 0; t < numOfBuckets; t++) {
var myBucket = this._parent["bucket" + t];
if ((this.hitTest(myBucket.bucket)) || (this.hitTest(myBucket.mHolder))) {
hit.start();
//myBucket.CT += (miniArray.length - num);
//myBucket.txtCT.text = myBucket.CT;
//myBucket.btnRemove1._visible = true;
//myBucket.btnRemoveAll._visible = true;
//makeMini(myBucket);
//trace(labelArray[t]+" "+myBucket.CT);
//traceText.trace.text = (labelArray[t] + " " + myBucket.CT);
//traceText.play(2);
meHit = true;
break;
}
}
if (meHit) {
for (var j = miniArray.length - 1; j > num; j--) {
var aCoin = this._parent["minicoin" + j];
aCoin.removeMovieClip();
}
this.removeMovieClip();
miniArray.splice(num);
} else {
for (var j = miniArray.length - 1; j >= this.num; j--) {
var aCoin = this._parent["minicoin" + j];
aCoin._x = aCoin.sX;
aCoin._y = aCoin.sY;
}
}
};
}
}
function coinAnimate(coinAnim) {
var CT = coinAnim.CT;
var xPos = 28;
var yPos = 80;
var cHolder = coinAnim.createEmptyMovieClip("cAnim", 1);
for (var i = 0; i < CT; i++) {
var mycoinAnim = cHolder.attachMovie("coinAnim", "coinAnim" + +i, i);
}
}
function makeStack() {
var xPos = 20;
var yPos = (stacknumber - stack.length * yOffset) + 460;
for (var i = stack.length - 1; i >= 0; i--) {
var myCoin = attachMovie("coinMC", "coin" + i, i + 1000, {_x:xPos, _y:yPos});
myCoin.num = i;
myCoin.sX = xPos;
myCoin.sY = yPos;
yPos += yOffset;
myCoin.onPress = function() {
this.startDrag();
this.onMouseMove = function() {
var nyPos = this._y;
for (var j = stack.length - 1; j > this.num; j--) {
var aCoin = this._parent["coin" + j];
aCoin._x = this._x;
nyPos -= yOffset;
aCoin._y = nyPos;
}
};
};
myCoin.onRelease = function() {
stopDrag();
delete this.onMouseMove;
var meHit = false;
var num = this.num;
for (var t = 0; t < numOfBuckets; t++) {
var myBucket = this._parent["bucket" + t];
if ((this.hitTest(myBucket.bucket)) || (this.hitTest(myBucket.mHolder))) {
hit.start();
myBucket.CT += (stack.length - num);
myBucket.txtCT.text = myBucket.CT;
myBucket.btnRemove1._visible = true;
myBucket.btnRemoveAll._visible = true;
makeMini(myBucket);
if(stack.length==stacknumber){
clickRemoveGlobal._visible=true;
}
//trace(labelArray[t]+" "+myBucket.CT);
traceText.trace.text = (labelArray[t] + " " + myBucket.CT);
traceText.play(2);
meHit = true;
break;
}
}
if (meHit) {
for (var j = stack.length - 1; j > num; j--) {
var aCoin = this._parent["coin" + j];
aCoin.removeMovieClip();
}
this.removeMovieClip();
stack.splice(num);
} else {
for (var j = stack.length - 1; j >= this.num; j--) {
var aCoin = this._parent["coin" + j];
aCoin._x = aCoin.sX;
aCoin._y = aCoin.sY;
}
}
};
}
}
function doRemove1() {
this._parent.txtCT.text = --this._parent.CT;
stack.push(stack.length + 1);
rem.start();
makeStack();
makeMini(this._parent);
if (this._parent.CT == 0) {
this._parent.txtCT.text = "";
this._visible = false;
this._parent.btnRemoveAll._visible = false;
}
if(stack.length==stacknumber){
clickRemoveGlobal._visible=false;
}
}
function doRemoveAll() {
while (this._parent.CT > 0) {
this._parent.txtCT.text = --this._parent.CT;
stack.push(stack.length + 1);
}
rem.start();
makeStack();
makeMini(this._parent);
this._parent.txtCT.text = "";
this._visible = false;
if(stack.length==stacknumber){
clickRemoveGlobal._visible=false;
}
this._parent.btnRemove1._visible = false;
}
function doInit() {
stack = new Array(stacknumber);
rem.start();
makeBuckets();
makeStack();
}
clickRemoveGlobal.onPress = function(){
if(stack.length!=stacknumber){
doInit();
clickRemoveGlobal._visible=false;
}
}
//
doInit();
//
This handles the drag and drop of the mini stacks...
If I get the time later, I'll try to mess with more regular stacks...Code://
stop();
clickRemoveGlobal._visible = false;
var nb:Number;
if (!nb) {
nb = 12;
}
var bx = 180;
var numofRows = 4;
var stacknumber = Number(stacknumber);
if (!stacknumber) {
stacknumber = 12;
}
var yOffset = 22;
var hit = new Sound();
hit.attachSound("kerching");
var rem = new Sound();
rem.attachSound("click");
if (!labelstring) {
labelstring="porsche,ferrari,ford,chevy,toyota,bentley,cooper,hummer,honda,mustang,el camino,corvair";
}
var numOfBuckets = nb;
var labelArray:Array = labelstring.split(",");
var stack:Array = Array(stacknumber);
function makeBuckets() {
for (var i = 0; i < numOfBuckets; i++) {
var myBucket = this.attachMovie("bucketMC", "bucket" + i, i, {_x:70 + (bx * (Math.floor(i / numofRows) + 1)), _y:20 + (130 * (i % numofRows))});
myBucket.btnRemove1._visible = false;
myBucket.btnRemove1.onPress = doRemove1;
myBucket.btnRemoveAll._visible = false;
myBucket.btnRemoveAll.onPress = doRemoveAll;
myBucket.txtCT.text = "";
myBucket.CT = 0;
myBucket.miniArray = new Array();
myBucket.myLabel.text = labelArray[i];
}
}
function makeMini(mc) {
var CT = mc.CT;
var xPos = 28;
var yPos = 80;
var mHolder = mc.createEmptyMovieClip("mHolder", 1);
for (var i = 0; i < CT; i++) {
var myMini = mHolder.attachMovie("coinMC", "minicoin" + +i, i);
myMini._xscale = myMini._yscale = 30;
myMini._x = xPos;
myMini._y = yPos - ((yOffset * 36) / 100) * i;
myMini.num = i;
myMini.sX = xPos;
myMini.sY = yPos - ((yOffset * 36) / 100) * i;
myMini.mc = mc;
myMini.onPress = function() {
this.addNum = this.mc.CT - this.num;
this.mc.swapDepths(numOfBuckets);
this.startDrag();
this.onMouseMove = function() {
var nyPos = this._y;
for (var j = this.mc.CT - 1; j > this.num; j--) {
var aCoin = this._parent["minicoin" + j];
aCoin._x = this._x;
nyPos -= yOffset - 13;
aCoin._y = nyPos;
}
};
};
myMini.onRelease = function() {
stopDrag();
delete this.onMouseMove;
var meHit = false;
var num = this.num;
for (var t = 0; t < numOfBuckets; t++) {
var myBucket = this.mc._parent["bucket" + t];
if ((this.hitTest(myBucket.bucket)) && this.mc != myBucket) {
hit.start();
myBucket.CT += this.addNum;
myBucket.txtCT.text = myBucket.CT;
myBucket.btnRemove1._visible = true;
myBucket.btnRemoveAll._visible = true;
makeMini(myBucket);
meHit = true;
break;
}
}
if (meHit) {
for (var j = this.mc.CT - 1; j > this.num; j--) {
this.mc.CT--;
var aCoin = this._parent["minicoin" + j];
aCoin.removeMovieClip();
}
this.mc.CT--;
this.mc.txtCT.text = this.mc.CT;
if (this.mc.CT == 0) {
this.mc.btnRemove1._visible = false;
this.mc.btnRemoveAll._visible = false;
this.mc.txtCT.text = "";
}
this.removeMovieClip();
} else {
for (var j = this.mc.CT - 1; j >= this.num; j--) {
var aCoin = this._parent["minicoin" + j];
aCoin._x = aCoin.sX;
aCoin._y = aCoin.sY;
}
}
};
}
}
function coinAnimate(coinAnim) {
var CT = coinAnim.CT;
var xPos = 28;
var yPos = 80;
var cHolder = coinAnim.createEmptyMovieClip("cAnim", 1);
for (var i = 0; i < CT; i++) {
var mycoinAnim = cHolder.attachMovie("coinAnim", "coinAnim" + +i, i);
}
}
function makeStack() {
var xPos = 20;
var yPos = (stacknumber - stack.length * yOffset) + 460;
for (var i = stack.length - 1; i >= 0; i--) {
var myCoin = attachMovie("coinMC", "coin" + i, i + 1000, {_x:xPos, _y:yPos});
myCoin.num = i;
myCoin.sX = xPos;
myCoin.sY = yPos;
yPos += yOffset;
myCoin.onPress = function() {
this.startDrag();
this.onMouseMove = function() {
var nyPos = this._y;
for (var j = stack.length - 1; j > this.num; j--) {
var aCoin = this._parent["coin" + j];
aCoin._x = this._x;
nyPos -= yOffset;
aCoin._y = nyPos;
}
};
};
myCoin.onRelease = function() {
stopDrag();
delete this.onMouseMove;
var meHit = false;
var num = this.num;
for (var t = 0; t < numOfBuckets; t++) {
var myBucket = this._parent["bucket" + t];
if ((this.hitTest(myBucket.bucket)) || (this.hitTest(myBucket.mHolder))) {
hit.start();
myBucket.CT += (stack.length - num);
myBucket.txtCT.text = myBucket.CT;
myBucket.btnRemove1._visible = true;
myBucket.btnRemoveAll._visible = true;
makeMini(myBucket);
if (stack.length == stacknumber) {
clickRemoveGlobal._visible = true;
}
traceText.trace.text = (labelArray[t] + " " + myBucket.CT);
traceText.play(2);
meHit = true;
break;
}
}
if (meHit) {
for (var j = stack.length - 1; j > num; j--) {
var aCoin = this._parent["coin" + j];
aCoin.removeMovieClip();
}
this.removeMovieClip();
stack.splice(num);
} else {
for (var j = stack.length - 1; j >= this.num; j--) {
var aCoin = this._parent["coin" + j];
aCoin._x = aCoin.sX;
aCoin._y = aCoin.sY;
}
}
};
}
}
function doRemove1() {
this._parent.txtCT.text = --this._parent.CT;
stack.push(stack.length + 1);
rem.start();
makeStack();
makeMini(this._parent);
if (this._parent.CT == 0) {
this._parent.txtCT.text = "";
this._visible = false;
this._parent.btnRemoveAll._visible = false;
}
if (stack.length == stacknumber) {
clickRemoveGlobal._visible = false;
}
}
function doRemoveAll() {
while (this._parent.CT > 0) {
this._parent.txtCT.text = --this._parent.CT;
stack.push(stack.length + 1);
}
rem.start();
makeStack();
makeMini(this._parent);
this._parent.txtCT.text = "";
this._visible = false;
if (stack.length == stacknumber) {
clickRemoveGlobal._visible = false;
}
this._parent.btnRemove1._visible = false;
}
function doInit() {
stack = new Array(stacknumber);
rem.start();
makeBuckets();
makeStack();
}
clickRemoveGlobal.onPress = function() {
if (stack.length != stacknumber) {
doInit();
clickRemoveGlobal._visible = false;
}
};
//
doInit();
//
Thanks again dawson. There seems to be a problem with the bucket depth when less than 12 are selected. Check this out:
http://www.porper.net/ix/flash/coinform.html
and choose any number for number of buckets (leave everything else blank for default). You'll see that if you place coins in any bucket in the 1st row, and then try to move mini coins to another bucket (greater than that one) the coins are behind the bucket.
However, if you create the demo using the default (not making any selections) it works fine. Any thoughts on this?
Try this...
Code:clickRemoveGlobal._visible = false;
if (!nb) {
nb = 12;
} else {
nb = Number(nb);
}
var bx = 180;
var numofRows = 4;
if (!stacknumber) {
stacknumber = 12;
} else {
stacknumber = Number(stacknumber);
}
var yOffset = 22;
Works great dawson thanks. However I found a bug that I can't seem to snuff out.
It occurs after you drag and drop any mini coin(s) from one bucket to another, and then fire the clickRemoveGlobal. Afterwards the array is split in an odd way, mini coins are left behind, and levels get screwy too. Is this a problem with the doRemoveAll function?
Code:function doRemoveAll() {
while (this._parent.CT > 0) {
this._parent.txtCT.text = --this._parent.CT;
stack.push(stack.length + 1);
}
rem.start();
makeStack();
makeMini(this._parent);
this._parent.txtCT.text = "";
this._visible = false;
if (stack.length == stacknumber) {
clickRemoveGlobal._visible = false;
}
this._parent.btnRemove1._visible = false;
}
Cleaned up the code, added stacks for groups of ten ... Added another linked movie clip in the library 'coin10MC'.
You'll need to play with the positioning and sizing numbers in the makeBuckets function to get them to line up properly in your file. HTH
Code:stop();
//
if (!nb) {
nb = 12;
} else {
nb = Number(nb);
}
if (!stacknumber) {
stacknumber = 52;
} else {
stacknumber = Number(stacknumber);
}
if (!labelstring) {
labelstring = "0,1,2,3,4,5,6,7,8,9,10,11";
}
var labelArray = labelstring.split(",");
var numOfBuckets = Math.min(labelArray.length, nb);
var numofRows = 4;
var _MAIN = this;
var hit = new Sound();
hit.attachSound("kerching");
var rem = new Sound();
rem.attachSound("click");
//
function makeIt(mc) {
for (t in mc) {
if (typeof mc[t] == "movieclip" && mc[t].num != undefined) {
mc[t].removeMovieClip();
}
}
var CT1 = mc.CT % 10;
var CT10 = Math.floor(mc.CT / 10);
if (CT1 == 0 && CT10 > 0) {
CT10--;
CT1 = 10;
}
mc.CT1 = CT1;
mc.CT10 = CT10;
var xOffset = mc.xOffset;
var yOffset = mc.yOffset;
var xPos = mc.xPos;
var yPos = mc.yPos;
var myCoin;
if (CT10 > 0) {
for (i = 1; i <= CT10; i++) {
myCoin = mc.attachMovie("coin10MC", "coin" + i, i, {_x:xPos, _y:yPos});
myCoin._xscale = myCoin._yscale = mc.xyScale;
myCoin.val = 10;
myCoin.num = i;
myCoin.onPress = doPress;
myCoin.onRelease = doRelease;
yPos -= yOffset;
}
}
if (CT1 > 0) {
xPos += xOffset;
yPos = mc.yPos;
for (i = CT10 + 1; i <= CT1 + CT10; i++) {
myCoin = mc.attachMovie("coinMC", "coin" + i, i, {_x:xPos, _y:yPos});
myCoin._xscale = myCoin._yscale = mc.xyScale;
myCoin.val = 1;
myCoin.num = i;
myCoin.onPress = doPress;
myCoin.onRelease = doRelease;
yPos -= yOffset;
}
}
if (mc.CT > 0) {
mc.txtCT.text = mc.CT;
mc.btnRemove1._visible = true;
mc.btnRemoveAll._visible = true;
} else {
mc.txtCT.text = "";
mc.btnRemove1._visible = false;
mc.btnRemoveAll._visible = false;
}
clickRemoveGlobal._visible = (mc.CT < stacknumber) ? true : false;
}
//
function makeBuckets() {
var myHolder;
for (i = 0; i < numOfBuckets; i++) {
_MAIN["mHolder" + i].removeMovieClip();
myHolder = _MAIN.attachMovie("bucketMC", "mHolder" + i, i, {_x:70 + (180 * (Math.floor(i / numofRows) + 1)), _y:20 + (130 * (i % numofRows))});
myHolder.btnRemove1._visible = false;
myHolder.btnRemove1.onPress = doRemove1;
myHolder.btnRemoveAll._visible = false;
myHolder.btnRemoveAll.onPress = doRemoveAll;
myHolder.txtCT.text = "";
myHolder.myLabel.text = labelArray[i];
myHolder.xOffset = 36;
myHolder.yOffset = 8;
myHolder.yPos = myHolder.bucket._height - myHolder.yOffset;
myHolder.xPos = 4;
myHolder.xyScale = 30;
myHolder.CT = 0;
}
myHolder = _MAIN.createEmptyMovieClip("mHolder" + numOfBuckets, numOfBuckets);
myHolder._x = 16;
myHolder._y = 460;
myHolder.xOffset = 100;
myHolder.yOffset = 22;
myHolder.yPos = 0;
myHolder.xPos = 0;
myHolder.xyScale = 100;
myHolder.CT = stacknumber;
makeIt(myHolder);
}
function doRemoveAll() {
rem.start();
var mcP = this._parent;
var mcR = mcP._parent["mHolder" + numOfBuckets];
mcR.CT += mcP.CT;
mcP.CT = 0;
makeIt(mcP);
makeIt(mcR);
}
function doRemove1() {
rem.start();
var mcP = this._parent;
var mcR = mcP._parent["mHolder" + numOfBuckets];
mcP.CT--;
mcR.CT++;
makeIt(mcP);
makeIt(mcR);
}
function doInit() {
clickRemoveGlobal._visible = false;
rem.start();
makeBuckets();
}
clickRemoveGlobal.onPress = function() {
doInit();
};
//
doPress = function () {
this.startDrag();
var mcP = this._parent;
mcP.depth = mcP.getDepth();
mcP.swapDepths(numOfBuckets + 100);
this.topVal = (this.val == 10) ? mcP.CT10 : mcP.CT10 + mcP.CT1;
this.numVal = (this.topVal - (this.num - 1)) * this.val;
mcP.CT -= this.numVal;
this.onMouseMove = function() {
var nyPos = this._y;
for (i = this.num + 1; i <= this.topVal; i++) {
var aCoin = mcP["coin" + i];
nyPos -= mcP.yOffset;
aCoin._y = nyPos;
aCoin._x = this._x;
}
updateAfterEvent();
};
};
doRelease = function () {
stopDrag();
delete this.onMouseMove;
var hitMe = false;
for (i = 0; i < numOfBuckets; i++) {
var myHolder = this._parent._parent["mHolder" + i];
if (myHolder["bucket"].hitTest(_xmouse, _ymouse, true)) {
myHolder.CT += this.numVal;
traceText.trace.text = (labelArray[i] + " " + myHolder.CT);
traceText.play(2);
makeIt(myHolder);
hitMe = true;
hit.start();
break;
}
}
myHolder = this._parent;
myHolder.swapDepths(myHolder.depth);
if (!hitMe) {
myHolder.CT += this.numVal;
}
makeIt(myHolder);
};
//
doInit();
Spectacular my friend. Efficient and elegant.
I'm trying to come up with a function to count the size of the main stack and subtract that from the original total, so I can display the total as text. Given the new method you used to create the stacks I'm having a hard time figuring this out.
I tried this, it works but it only fires once per drop.
So then I figured it might be easier to write a function that counts the value of the main stack and subtracts it from the stacknumber. But I simply can't figure that out. The stacknumber array is no longer a part of this equation.Code:doRelease = function () {
stopDrag();
delete this.onMouseMove;
var hitMe = false;
for (i = 0; i < numOfBuckets; i++) {
var myHolder = this._parent._parent["mHolder" + i];
if (myHolder["bucket"].hitTest(_xmouse, _ymouse, true)) {
myHolder.CT += this.numVal;
traceText.trace.text = (labelArray[i] + " " + myHolder.CT);
traceText.play(2);
trace(this.numVal);
totalStack.text = (stacknumber-this.numVal);
makeIt(myHolder);
hitMe = true;
hit.start();
break;
}
}
Also, if after this game is over I want to send the totals of each bucket to a javascript via getURL or ExternalInterface etc, what variable(s) could I use in the current setup to do this? Do I need to write a function that keeps a running count of each as the coins are dropped/removed?
Thanks so damn much for your help as always.
For the running total for the stack...
Make the text field (instance name: txtCT) inside a linked movie clip called 'stackMC'. Then in the makeBuckets function, change the createEmptyMovieClip to an attachMovie, and add a line to initialize the value. The field will now update just like the ones in the buckets.
To get the values after game is over...Code:myHolder = _MAIN.attachMovie("stackMC", "mHolder" + numOfBuckets, numOfBuckets);
myHolder._x = 16;
myHolder._y = 460;
myHolder.xOffset = 100;
myHolder.yOffset = 22;
myHolder.yPos = 0;
myHolder.xPos = 0;
myHolder.xyScale = 100;
myHolder.CT = stacknumber;
myHolder.txtCT.text = stacknumber;
makeIt(myHolder);
Code:btnDone.onPress = function(){
for (i = 0; i < numOfBuckets; i++) {
trace(labelArray[i]+": "+_MAIN["mHolder" + i].CT)
}
trace("Stack: "+_MAIN["mHolder" + numOfBuckets].CT)
}