Archief - flash puzzel die steeds fouten geeft

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

_rusty_

Legacy Member
Beste

Ik moet voor een eindtaak voor school een flash projectje maken.

ik heb gekozen voor een puzzel maar nu krijg is steeds #1010 fouten in mijn handler die ervoor zorgt die mijn puzzelstukken vastclippen op een voorbeeld (resultaat)

iemand die mij kan/wil helpen?

met vriendelijke groeten

stijn

W0utR

Legacy Member
Zonder wat code te geven zal niemand je echt kunnen helpen vrees.

Post eens de code waar het fout gaat, alsook de foutmelding.

_rusty_

Legacy Member
Code:
package  {
		
		
		import flash.display.MovieClip;
		import flash.events.*;
		import com.greensock.TweenLite;
		import com.greensock.*;
		
		
		
		public class main extends MovieClip {
			private var xpos: int;
			private var ypos: int;
			private var aantalJuist: int=0;
			
			
			public function main() {
				// constructor code
				Landschap.MenuClip.addEventListener(MouseEvent.MOUSE_DOWN, navigatieHandler);
				Landschap.LosseStukkenClip.addEventListener(MouseEvent.MOUSE_DOWN, sleepStukHandler);
				Landschap.LosseStukkenClip.addEventListener(MouseEvent.MOUSE_UP, StopSleephandler);
				
				Landschap.ProficiatClip.visible = false;
			}
			
			public function sleepStukHandler(evt:MouseEvent){
				var mc:MovieClip = evt.target as MovieClip;
				
				xpos= evt.target.x;
				ypos= evt.target.y;
				
				mc.parent.setChildIndex(mc, mc.parent.numChildren -1)
				
				evt.target.startDrag();
				}
			
			public function StopSleephandler(evt:MouseEvent){
				evt.target.stopDrag();
				
				var juist:Boolean = false;
				
				//controleren of puzzelstuk juist ligt
				var sleepStuk:MovieClip = evt.target as MovieClip;
				for (var i:int = 0; i < Landschap.resultaatClip.numChildren; i++){
					var mc:MovieClip = Landschap.resultaatClip.getChildAt(i) as MovieClip;
					if(Landschap.sleepStuk.name == mc.name && mc.hitarea.hitTestPoint(mouseX, mouseY)){
						Landschap.sleepStuk.x = mc.x;
						Landschap.sleepStuk.y = mc.y;
						juist = true;
						aantalJuist ++;
						}
					}
				
				//evt.target.x=xpos;
				//evt.target.y=ypos;
				if(juist == false)
				TweenLite.to(evt.target, 1, {x:xpos, y:ypos});
				
				if(aantalJuist == 4)
				Landschap.proficiatClip.visible = true;
				}
				
				
			public function navigatieHandler(evt:MouseEvent)
			{
				trace("menu item: " + evt.target.name);
				var xposSite:int = 0;
				
				
				switch(evt.target.name)
				{
					case "btnBos" : xposSite = +800;
					
					break;
					case "btnDieren" : xposSite = -860;
					
					
					break;
					case "btnTerug" : xposSite = -40;
					
					break;
					
					
					
					}
					if(xposSite != 0){
						TweenLite.to(Landschap, 1, {x:xposSite});
						
						
					}
					
					
					
					
				}
				
			}
			
		}



foutcode is:

TypeError: Error #1010: Een term is ongedefinieerd en heeft geen eigenschappen.
at main/StopSleephandler()

Zero Grav

Legacy Member
En gebruik eens een Engelstalige debugger :)

Soit, error #101 is een null reference, dus ge verwijst ergens naar een object dat (nog) niet geïnitialiseerd is of simpelweg niet bestaat. Even zoeken naar welk object dat is dus.

Ik zou trouwens ook geen evt.target gebruiken in uw mouse_up handler, maar bij het starten van uw slepen het huidige object opslaan in een instance variable en die dan hergebruiken bij het stoppen.

_rusty_

Legacy Member
Hoe bedoel je precies?
hoe zou ik dit kunnen oplossen?

Ik heb nog een ander probleem waar ik straks nog even op zal terug komen

YaMo

Legacy Member
Staat er nergens op welke regel die error optreedt?

En verder zou ik nog willen opmerken dat namen van classes over het algemeen beginnen met een hoofdletter en variabelen met een kleine letter.

_rusty_

Legacy Member
Als ik ga debuggen dan geeft flash meestal de foutmelding in dit stukje code

voornamelijk in de if lus.

Code:
public function StopSleephandler(evt:MouseEvent)
		{
			evt.target.stopDrag();

			var juist:Boolean = false;

			//controleren of puzzelstuk juist ligt
			var sleepStuk:MovieClip = evt.target as MovieClip;
			for (var i:int = 0; i < Landschap.resultaatClip.numChildren; i++)
			{
				var mc:MovieClip = Landschap.resultaatClip.getChildAt(i) as MovieClip;
				if (Landschap.sleepStuk.name == mc.name && mc.hitarea.hitTestPoint(mouseX,mouseY))
				{
					Landschap.sleepStuk.x = mc.x;
					Landschap.sleepStuk.y = mc.y;
					juist = true;
					aantalJuist++;
				}
			}
			
			

			//evt.target.x=xpos;
			//evt.target.y=ypos;
			if (juist == false)
			{
				TweenLite.to(evt.target, 1, {x:xPos, y:yPos});
			}

			if (aantalJuist == 4)
			{
				Landschap.proficiatClip.visible = true;
			}
			
		}

Zero Grav

Legacy Member
Ik bedoel dat ge uw objecten die ge aanspreekt in die functie eens moet tracen om te kijken of ze niet null zijn. Want daar crasht em op.

Pak bijvoorbeeld dat "evt.target" geen waarde heeft (wat afaik niet zou kunnen, maar soit, 't is maar een voorbeeld), dan heeft sleepStuk ook geen waarde en crasht em daarop. Hetzelfde met Landschap (zou een kleine letter moeten zijn eigenlijk) of mc of Landschap.proficiatClip of Landschap.proficiatClip. Dat zijn allemaal objecten die ge aanspreekt, die eventueel null kunnen zijn.

Dus trace(evt.target); bijvoorbeeld al eens om te kijken of het niet null is (en of het wel het juiste object is), en ga zo verder de lijst af. Of zet gewoon een breakpoint in uw code en dan kunt ge het sneller zien.

passero

Legacy Member
Heeft flash geen debugger waarbij ge kunt volgen en zo kunt zien welk object NULL is?

_rusty_

Legacy Member
De fout zat bij de hitarea, deze was dus null en daarop crashte hij dus.
Ik heb het gewoon verwijderd en nu werkt de puzzel toch al zoals het moet :D

thx Zero Grav

Mijn ander probleem post ik hier ook, als het me niet eerst lukt het zelf op te lossen :D

mvg

Zero Grav

Legacy Member
passero zei:
Heeft flash geen debugger waarbij ge kunt volgen en zo kunt zien welk object NULL is?

Jawel, maar als ge niet weet wat een null reference is dan weet ge doorgaans ook niet hoe ge de debugger moet gebruiken. :p Sowieso is die van Flash ook echt brol, Flash Builder is veel handiger.

_rusty_

Legacy Member
Ik heb hier nog een klein foutje tegengekomen, maar weet niet helemaal hoe ik het zou moeten oplossen.

ik heb dus 6 movieclips genaamd vb.(babyBottle,..., en babyBottleTarget)
nu wil ik dat ik mijn movieclip babyBottle kan verslepen (dit werkt) maar bij het loslaten wil ik dat er gecontroleerd wordt ofdat de clip babyBottleTarget raakt.
dit heb ik als volgt gedaan:
Code:
private function stopDragObject(evt:MouseEvent)
		{


			if (evt.target.hitTestObject(getChildByName(evt.target.name + "Target")))
			{

				evt.target.x = getChildByName(evt.target.name + "Target").x;
				evt.target.y = getChildByName(evt.target.name + "Target").y;


				//hier code plaatsen voor audio af te spelen
			}
			else
			{
				evt.target.x = xPosDrag;
				evt.target.y = yPosDrag;
			}
evt.target.stopDrag();
			
		}

dan krijg ik deze error
TypeError: Error #2007: Parameter hitTestObject mag niet null zijn.
at flash.display::DisplayObject/_hitTest()
at flash.display::DisplayObject/hitTestObject()
at main/stopDragObject()

Zero Grav

Legacy Member
Ge moet natuurlijk ook wel uw foutmeldingen lezen. Uw parameter in hitTestObject is null. Dus er is geen child dat de naam evt.target.name + "Target" heeft.

Uw evt.target.name eens tracen en kijken of het wel is wat ge ervan verwacht.

_rusty_

Legacy Member
Ja, ik heb het gevonden.

de fout zat idd bij evt.target.name kheb ipv evt.target.name gewoon direct de namen erin gezet en de functie 3X gekopierd :D

het werkt :D

W0utR

Legacy Member
Het eerste wat je in dit geval moet doen is je Flash in het engels zetten zodat je ook engelse errors krijgt.
Waarom? Omdat je engelse errors veel makkelijker kan opzoeken op google.

Daarna begin je gewoon met ofwel breakpoints te zetten, ofwel de trace functie te gebruiken.
trace(evt.traget), geeft dat null, dan weet je dat er ergens iets fout loopt waardoor er geen object binnenkomt.

Error 1010 zou je na een paar dagen toch al van buiten moeten kennen :P
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan