| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Oct 2010 Ort: nähe Bremerhaven
Beiträge: 22
|
Hey.....bin noch dabei ein spiel zu programmieren komme aber nicht weiter weil ich keinen vernünftigen hittest zum laufen kriege.. hab schon einiges versucht aber nichts will funktionieren Code: stage.addEventListener(Event.ENTER_FRAME, hitTest);
/*_timerBewegung= new Timer(20);
_timerBewegung.addEventListener(TimerEvent.TIMER, hitTest);
_timerBewegung.start();*/
}
private function hitTest(event:Event):void{
//var fishes:Array=_fish.getFishes();
for each(var fish:Fishes in _fishArray){
//Wenn Fish zwischen den x-Werten 110 und 90 ist....und den y-Werten der Hai.y Position +/- 10 px
if(fish.x <=110 && fish.x >= 90 && fish.y <= _shark.y+10 && fish.y >= _shark.y -10){
fish.killFish(fish);
}
}
habs also einmal über ein EnterFrame und über Timer laufen lassen beides funktioniert nicht Code:
for each(var fish:Fishes in _fishArray){
if( (_shark.hitTestObject(fish))==true){
fish.killFish(fish);
//_gameScore.setScore(1);
}
} Code: for each(var fish:Fishes in _fishArray){
var hitX:Number = _shark.x;
var hitY:Number = _shark.y - 20;
var hitY2:Number = _shark.y + 20;
if(fish.hitTestPoint(105, hitY, true) || fish.hitTestPoint(105, hitY2, true)){
fish.killFish(fish);
//_gameScore.setScore(1);
}else{
trace("");
}
Also ich bin verzweifelt :( .... ich brauche eure hilfe |
| | |
| | #2 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.326
|
du denkst drann, das hitTest globale koordinaten erwartet? siehe auch localToGlobal und globalToLocal erzeuge ein objekt (einen punkt) den an der stelle positionieren, wo du hittestest. dann siehst du ja, wo dein objekt ist und wo du eine kollision vermutest.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Oct 2010 Ort: nähe Bremerhaven
Beiträge: 22
|
hey....ja danke hab meinen fehler gefunden^^ jetzt hab ich das nächste Problem! Ich arbeite mit Flex Builder 3 und lade meine Grafiken von einer .SWC Datei. Hab ja verschiedene Fische die reinschwimmen, die Animation vom Schwimmen läuft automatisch ab, das ist in Flash alles so animiert worden. Jetzt hab ich aber ja die Fische in einem Array, damit sie zufällig auf die Bühne kommen. Wie kann ich jetzt einen einzelnen ansprechen um sozusagen die sterbeani zu starten?müsste sie theoretisch über gotoAndPlay() abspielen...Frage ist nur wie ich auf den RICHTIGEN fisch zugreifen kann Code: private function createFish():void
{
_fish1= new KugelfischMC();
_fish2= new ClownFMove();
_fish3= new Fisch3MC();
_fisharray= new Array(/*_aal,*/_fish1,_fish2, _fish3);
_fish= new Sprite();
_fish.addChild(_fisharray[Math.floor(Math.random()*3)]);
addChild(_fish);
y=Math.random()*+stage.stageHeight-100;
} Code:
public function killFish(fish:Fishes):void
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
//Animation abspielen für einzelne Fische
//blabla.gotoAndPlay(55);
} Geändert von xXRockMyLifeXx (20-10-2010 um 14:19 Uhr) |
| | |
| | #4 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.326
| Code: // wieso _fish= new Sprite(); _fish.addChild(_fisharray[Math.floor(Math.random()*3)]); addChild(_fish); // anstatt addChild(_fisharray[Math.floor(Math.random()*3)]); getChildAt(x); // ist der x.te fisch auf der bühne getChildAt(x).getChildAt(0); // ist das 0.te objekt da drinn getChildAt(x).getChildAt(0).sterbeani(); im 2. fall getChildAt(x).sterbeani();
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Oct 2010 Ort: nähe Bremerhaven
Beiträge: 22
|
leider funktioniert das nich ganz... getChildAt gibt mir zwar den richtigen MovieClip aber ich kann kein gotoAndPlay darauf anwenden... ach jaa....is auch das erste flash spiel das ich nach meinem studium mache-.- hab halt noch einiges zu lernen |
| | |
| | #6 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.326
|
// zu z.B. var fisch:MovieClip = this.getChildAt(x) as MovieClip; fisch.gotoAndPlay(y); // besser? Code: var fischAry:Array=[];
switch (Math.floor(Math.random()*3)) {
case 1: fischAry.push(new KugelfischMC()); break;
case 2: fischAry.push(new ClownFMove()); break;
case 3: fischAry.push(new Fisch3MC()); break;
}
addChild(fischAry[fischAry.length-1]);
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Oct 2010 Ort: nähe Bremerhaven
Beiträge: 22
| EventListener
Und schon wieder das nächste Problem an der Backe -.- Ich hab mein Spiel jetzt soweit das ich zum EndScreen komme. Ich entferne also das Spiel und füge den Endscreen hinzu. Code: private function onSpielende(event:Event):void{
_game.destroy();
_game.removeEventListener("SpielEnde", onSpielende);
removeChild(_game);
_restartScreen=new EndScreen();
addChild(_restartScreen);
_restartScreen.addEventListener("RestartButtonClick", onRestartButtonClick);
createEndScore();
} Wenn ich jetzt über den RestartButton im EndScreen das Spiel neu starten will dann bekomme ich folgenden fehler:TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich. at haigame::SharkHero/move()[/Users/sabinebrosicke/Desktop/HaiGame/GameProjekt/source/classes/haigame/SharkHero.as:52] also hier: Code: private function move(event:Event):void{
//Bewegung runter
if(dirKey == 1){
if(_sharky.y > stage.stageHeight - _sharky.height/2 -100){
_sharky.y += 0;
}else{
_sharky.y += 10;
}
}else if(dirKey == -1){
if(_sharky.y < 0 + _sharky.height/2 +10){
_sharky.y -=0;
}else{
_sharky.y -=10;
}
}
} Läuft auch zuerst alles über AddedToStage. Wo ist jetzt also der Fehler? |
| | |
| | #9 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.326
|
ich kann nicht sehen, wo bei dir zeile 52 ist (und hätte auch garkeine zeit dafür, deine programme zu durchforsten) zum debuggen, dem täglichen geschäft jedes programmierers: baue trace-befehle ein und benütze mal den debugger! dafür ist das ding ja da.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Oct 2010 Ort: nähe Bremerhaven
Beiträge: 22
|
jo danke.....hab mein Problem schon gefunden. Es ist mir ja fast schon peinlich wie oft bei mir fehler auftauchen -.- bin aber halt noch weit vom profi entfernt^^und dafür das ich nur 1 jahr studiert hat und AS3 nur ein kleiner teil meines studiums war finde ich doch das ich schon einiges gelernt hab |
| | |
| | #11 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.326
|
nur wer nichts macht macht keine fehler. ich mache jeden tag mindestens 300 fehler ;-)
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #12 (permalink) |
| Neuer User Registriert seit: Oct 2010 Ort: nähe Bremerhaven
Beiträge: 22
| aus Array löschen!
Huhu...Ich mal wieder^^ das nächste Problem ist aufgetaucht.... Obwohl ich eine Funktion dafür habe das mein kleinen Fische aus dem Array gelöscht werden sobald sie entweder den Bildschirmrand verlassen oder vom Hai berührt werden, wird das Array immer länger und länger und frisst unglaublich viel performance -.- vielleicht hab ich auch noch i-wo einen fehler?! Code: private function onFishComplete(event:Event):void{
//typisierung der variablen..... (casten)
var fish:Fishes = event.target as Fishes;
//funktion destroy() wird aufgerufen
fish.destroy();
/***********von Fish HitTest************/
var index:int = _fishArray.indexOf(fish);
//Fisch wird aus dem Array gelöscht
_fishArray.splice(index, 1);
//Variable Fisch wird entfernt
removeChild(fish);
fish= null;
}
//in Untergeordneter Klasse :
public function destroy():void
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
removeChildAt(0);
} |
| | |
| | #13 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.326
|
public function destroy():void das ist schonmal gut. besser, wenn du das mit events machen würdest. also die aufräumaktion via Event.REMOVED_FROM_STAGE aufrufen lassen removeChildAt(0); brauchst du nicht. mit removeChild(fish); werden auch alle movieclips von der bühne entfernt, die im fisch drinn sind. sollte ChildAt(0) irgend etwas spezielles haben, dann sollte das eine class haben mit einer funktion die auf Event.REMOVED_FROM_STAGE reagiert. script natürlich ungeprüft .. nur so auf verdacht getippt ;-) Code: var fish:Fishes = event.target as Fishes;
if (fish && fish!=null) { // immer prüfen!!
var index:int = _fishArray.indexOf(fish);
if (index>-1) { // immer prüfen!!
var ary:Array = _fishArray.splice(index, 1);
if (ary.length==1) { // immer prüfen!!
fish.destroy(); // wie gesagt, das besser via REMOVED_FROM_STAGE
removeChild(fish);
// fish= null; // unnötig eine locale variable auf null zu setzen.
} else {
trace("ERR fisch wurde nicht aus dem array entfernt, und jetzt?");
}
} else {
trace("ERR fisch ist unbekannt, und jetzt?");
}
} else {
trace("ERR event ist kein fisch, und jetzt?");
}
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (25-10-2010 um 12:39 Uhr) |
| | |
| | #14 (permalink) |
| Neuer User Registriert seit: Oct 2010 Ort: nähe Bremerhaven
Beiträge: 22
|
danke für deine schnelle antwort! I-wie hilft mir das noch nicht so ganz weiter ![]() Das Problem liegt glaube ich darin dass ich bei den eingefangenen Fischen erst eine Animation abspiele bevor sie gelöscht werden... Ich probiere nochmal ein bisschen weiter rum |
| | |
| | #15 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.326
|
das kann das problem nicht sein? a) stelle sicher das der fisch aus dem array gelöscht wird. mit trace überprüfen, ob das objekt tatsächlich gefunden wird bzw. if's im programm b) dann kann deine jahresendanimation laufen und am ende der ani löscht sich der fisch selbst von der bühne. das muss gehen. dein fehler kann nur daran liegen, das du nicht die richtigen objekte ansprichst bzw. zur falschen zeit?
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| HitTest für ein Mini-Spiel | Diwersant | Flash Einsteiger | 3 | 20-08-2008 15:45 |
| Spiel - Hittest nur 1mal | Nostradamus | Flash Einsteiger | 3 | 22-03-2008 18:40 |
| hitTest-Problem in Spiel | BjörnG | ActionScript 1 | 4 | 03-01-2007 09:35 |
| Hittest-Problem im Spiel | commander-x | Flash 4 und Flash 5 | 1 | 01-05-2002 12:30 |
| memory spiel hitTest | zebulor | ActionScript 1 | 6 | 17-03-2002 22:10 |