Copy link to clipboard
Copied
Hey guys,
I have followed an online tutorial, I now need a score system that will make it so when all of the items are dropped onto the right location the user can click a button and move onto the next frame, I've tried several things but none of them have worked, so I thought you guys might be able to help me...
Here is my code:
stop();
//http://passyworldofict.blogspot.co.uk/
var objectoriginalX:Number;
var objectoriginalY:Number;
germany_mc.buttonMode = true;
germany_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
germany_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
france_mc.buttonMode = true;
france_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
france_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
italy_mc.buttonMode = true;
italy_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
italy_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
uk_mc.buttonMode = true;
uk_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
uk_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
function pickupObject(event:MouseEvent):void {
event.target.startDrag(true);
event.target.parent.addChild(event.target);
objectoriginalX = event.target.x;
objectoriginalY = event.target.y;
}
function dropObject(event:MouseEvent):void {
event.target.stopDrag();
var matchingTargetName:String = "target" + event.target.name;
var matchingTarget:DisplayObject = getChildByName(matchingTargetName);
if (event.target.dropTarget != null && event.target.dropTarget.parent ==
matchingTarget){
event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject);
event.target.buttonMode = false;
event.target.x = matchingTarget.x;
event.target.y = matchingTarget.y;
} else {
event.target.x = objectoriginalX;
event.target.y = objectoriginalY;
}
}
Any help is much appreciated.
One way would be to keep a count that you increment each time a correct drop is made, When the count reaches a value that equates to all objects being properly dropped you can enable the button for moving on.
var count:int = 0;
function dropObject(event:MouseEvent):void {
event.target.stopDrag();
var matchingTargetName:String = "target" + event.target.name;
var matchingTarget:DisplayObject = getChildByName(matchingTargetName);
if (event.target.dropTarget != null && event.target.dropTarget.parent
...Copy link to clipboard
Copied
One way would be to keep a count that you increment each time a correct drop is made, When the count reaches a value that equates to all objects being properly dropped you can enable the button for moving on.
var count:int = 0;
function dropObject(event:MouseEvent):void {
event.target.stopDrag();
var matchingTargetName:String = "target" + event.target.name;
var matchingTarget:DisplayObject = getChildByName(matchingTargetName);
if (event.target.dropTarget != null && event.target.dropTarget.parent ==
matchingTarget){
event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject);
event.target.buttonMode = false;
event.target.x = matchingTarget.x;
event.target.y = matchingTarget.y;
count++;
if(count == 4){
buttonName.addEventListener... etc
}
} else {
event.target.x = objectoriginalX;
event.target.y = objectoriginalY;
}
}
Copy link to clipboard
Copied
Thanks a lot for the help, I changed added my button into the code:
var count:int = 0;
function dropObject(event:MouseEvent):void {
event.target.stopDrag();
var matchingTargetName:String = "target" + event.target.name;
var matchingTarget:DisplayObject = getChildByName(matchingTargetName);
if (event.target.dropTarget != null && event.target.dropTarget.parent ==
matchingTarget){
event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject);
event.target.buttonMode = false;
event.target.x = matchingTarget.x;
event.target.y = matchingTarget.y;
count++;
if(count == 4){
youareawinner_btn.addEventListener(MouseEvent.CLICK, p3Win)
}
} else {
event.target.x = objectoriginalX;
event.target.y = objectoriginalY;
}
}
function p3Win(evt:MouseEvent):void {
gotoAndStop(2);
}
My win button is "youareawinner_btn".
When I run the code I get a duplicate functin error on line 51:
function dropObject(event:MouseEvent):void {
Any ideas how to fix it?
Cheers.
Copy link to clipboard
Copied
To fix a duplicate function error, rename one of the functions that you have assigned the same name to.
Copy link to clipboard
Copied
Okay I did that, but when I run the flash animation the "youareawinner_btn" does not work (nothing happens)...
Any chance we can continue this over skype? I find as3 extremly confusing and I could really do with the help, I would realllly appreciate it.
Copy link to clipboard
Copied
It is probablty time for you to become familiar with using the trace() function.
Use the trace function to see if your count is incrementing as you expect it should. After the count++; line add: trace(count);
In your conditional that tests for the value of count, use trace("count reached"); to indicate to yourself that the event listener is being assigned to the button.
Also, inside your p3Win function add a trace to see if it is getting executed when you click the button.
Copy link to clipboard
Copied
Okay I did that, where would I see the output of the tests?
Because in the output monitor nothing happened.
My code now looks like the following:
stop();
//http://passyworldofict.blogspot.co.uk/
var objectoriginalX:Number;
var objectoriginalY:Number;
germany_mc.buttonMode = true;
germany_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
germany_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
france_mc.buttonMode = true;
france_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
france_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
italy_mc.buttonMode = true;
italy_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
italy_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
uk_mc.buttonMode = true;
uk_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
uk_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
function pickupObject(event:MouseEvent):void {
event.target.startDrag(true);
event.target.parent.addChild(event.target);
objectoriginalX = event.target.x;
objectoriginalY = event.target.y;
}
function dropObject(event:MouseEvent):void {
event.target.stopDrag();
var matchingTargetName:String = "target" + event.target.name;
var matchingTarget:DisplayObject = getChildByName(matchingTargetName);
if (event.target.dropTarget != null && event.target.dropTarget.parent ==
matchingTarget){
event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject);
event.target.buttonMode = false;
event.target.x = matchingTarget.x;
event.target.y = matchingTarget.y;
} else {
event.target.x = objectoriginalX;
event.target.y = objectoriginalY;
}
}
//scoresystem
var count:int = 0;
function dropObjec(event:MouseEvent):void {
event.target.stopDrag();
var matchingTargetName:String = "target" + event.target.name;
var matchingTarget:DisplayObject = getChildByName(matchingTargetName);
if (event.target.dropTarget != null && event.target.dropTarget.parent ==
matchingTarget){
event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject);
event.target.buttonMode = false;
event.target.x = matchingTarget.x;
event.target.y = matchingTarget.y;
count++;
trace(count);
if(count == 4){
youareawinner_btn.addEventListener(MouseEvent.CLICK, p3Win)
}
} else {
event.target.x = objectoriginalX;
event.target.y = objectoriginalY;
}
}
function p3Win(evt:MouseEvent):void {
gotoAndStop(2);
trace(count);
}
Copy link to clipboard
Copied
Why dp you have two functions that appear to be doing the same thing? The one you added the traces to should be deleted and you should put the traces in the function that actually gets used.
Copy link to clipboard
Copied
Okay, the trace works, it counts to four but when it gets to four the button still does not work, pressing the button does not fire the trace either.
Interestingly the trace goes:
1
2
3
4
4
The second 4 fires twice regardless of the object which has been placed on the 'hotspot'.
Copy link to clipboard
Copied
Okay, it works.
I seriously can't thank you enough, I've been working on this for the past few days and was close to giving up.
In case anyone is curious the code is:
stop();
//http://passyworldofict.blogspot.co.uk/
var objectoriginalX:Number;
var objectoriginalY:Number;
germany_mc.buttonMode = true;
germany_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
germany_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
france_mc.buttonMode = true;
france_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
france_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
italy_mc.buttonMode = true;
italy_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
italy_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
uk_mc.buttonMode = true;
uk_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
uk_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
function pickupObject(event:MouseEvent):void {
event.target.startDrag(true);
event.target.parent.addChild(event.target);
objectoriginalX = event.target.x;
objectoriginalY = event.target.y;
}
var count:int = 0;
function dropObject(event:MouseEvent):void {
event.target.stopDrag();
var matchingTargetName:String = "target" + event.target.name;
var matchingTarget:DisplayObject = getChildByName(matchingTargetName);
if (event.target.dropTarget != null && event.target.dropTarget.parent ==
matchingTarget){
event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject);
event.target.buttonMode = false;
event.target.x = matchingTarget.x;
event.target.y = matchingTarget.y;
count++;
trace(count);
if(count == 4){
youareawinner_btn.addEventListener(MouseEvent.CLICK, youWin)
}
} else {
event.target.x = objectoriginalX;
event.target.y = objectoriginalY;
}
}
function youWin(evt:MouseEvent):void {
gotoAndStop(2);
}
Find more inspiration, events, and resources on the new Adobe Community
Explore Now