Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-12-2011, 15:14   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2011
Beiträge: 9
Frage zu Bedingung

Hey ihr,

ich stellt meine Frage mal hier, da ich denke die Lösung sehr simpel ist und ich gerade nicht drauf komme.

Ich möchte bei einem Spiel schauen ob ein Gegner mein Avatar auf einer 2D Karte sieht. Es geht darum ob etwas zwischen der Sichtlinie ist, wie zB eine Mauer, Berg etc... Das ganze hab ich auch schon realisiert:

Code:
addEventListener(Event.ENTER_FRAME,viewCheck);
function viewCheck(e:Event):void {
	var vPoint:Number=0;
	var posTruck:Point=new Point(truck.x,truck.y);
	var posAlien:Point=new Point(alien.x,alien.y);
	for (var i=0; i<100; i++) {
		vPoint=vPoint+0.01;
		var posViewPoint:Point=Point.interpolate(posTruck,posAlien,vPoint);
		if (mountain.hitTestPoint(posViewPoint.x,posViewPoint.y,true)) {
			trace("Kein Sichtkontakt!");
			break;
		} else {
			trace("Sichtkontakt!");
		}
	}
}
In zeichne mir eine gedachte Linie, und auf 100 Punkten dieser Linie im regelnmäßigen Abstand wird geprüft ob dieser Punkt mit dem Hinderniss kollidiert. Funktioniert auch wie gewollt, nur komme ich gerade nicht drauf wie ich es realisiere, dass er meine else Bedingung nicht jedes mal ausführt, sondern nur wenn bei wirklich allen 100 vPoints kein Sichtkontakt bestand...

Beste Grüße & Danke

Geändert von artbasics (16-12-2011 um 17:50 Uhr)
artbasics ist offline   Mit Zitat antworten
Alt 16-12-2011, 15:20   #2 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Boolean ist Dein Freund
ActionScript:
  1. addEventListener(Event.ENTER_FRAME,viewCheck);
  2. function viewCheck(e:Event):void {
  3.    
  4.     var posTruck:Point = new Point(truck.x,truck.y);
  5.     var posAlien:Point = new Point(alien.x, alien.y);
  6.     var posViewPoint:Point;
  7.    
  8.     var intervisibility:Boolean = true;
  9.    
  10.     for (var i:Number = 0; i < 1; i += .01) {      
  11.         posViewPoint = Point.interpolate(posTruck, posAlien, i);
  12.         if (mountain.hitTestPoint(posViewPoint.x, posViewPoint.y, true)) {
  13.             intervisibility = false;
  14.             break;
  15.         }
  16.     }
  17.    
  18.     trace("Sichtkontakt: " + intervisibility);
  19. }
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (16-12-2011 um 15:21 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 16-12-2011, 15:26   #3 (permalink)
Neuer User
 
Registriert seit: Jan 2011
Beiträge: 9
Hallo,

danke Dir schonmal. Das Problem an der Sache ist, der Gegner soll im Folgenden angreifen wenn er den Avatar wirklich sehen kann. Wenn ich das so löse, dann ist zu bestimmten Zeiten des Methodenablaufs ja die Sichtbarkeit gegeben, aber diese wäre gar nicht erfüllt. Es muss quasi so erfüllt werden dass bei der Sichtlinie gerade 100 Punkte abgeprüft werden, und sollten alle 100 keinen HitTest ergeben, dann sieht der Gegner tatsächlich den Avatar, d.h. es passiert was.
artbasics ist offline   Mit Zitat antworten
Alt 16-12-2011, 15:35   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Zitat:
Zitat von artbasics Beitrag anzeigen
Es muss quasi so erfüllt werden dass bei der Sichtlinie gerade 100 Punkte abgeprüft werden, und sollten alle 100 keinen HitTest ergeben, dann sieht der Gegner tatsächlich den Avatar, d.h. es passiert was.
Aber genau das macht das Script, dass ich gepostet habe!

Zitat:
Zitat von artbasics Beitrag anzeigen
Wenn ich das so löse, dann ist zu bestimmten Zeiten des Methodenablaufs ja die Sichtbarkeit gegeben, aber diese wäre gar nicht erfüllt.
Meinst Du damit, dass irgendwas auf intervisibility zugreifen könnte, während die for-Schleife noch läuft?! Das ist aus zwei Gründen unmöglich:
  • intervisibility ist eine Funktionsvariable und daher nur in dieser Funktion gültig.

  • Der FlashPlayer unterstützt kein MultiThreading, sondern arbeitet immer alle Befehle nach einander ab. Es kann also garnichts anderes ausgeführt werden, während die for-Schleife läuft!


möglich
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (16-12-2011 um 15:45 Uhr)
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 16-12-2011, 15:45   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2011
Beiträge: 9
Okay,
unter diesen Gesichtspunkten funktioniert das so. Danke dir. Zwischenzeitlich hab ich mir auch noch Gedanken gemacht und bin auf eine zweite Möglichkeit gekommen:

PHP-Code:
if (i==99) {
            
trace("Sichtkontakt");
        } 
Wenn in der Schleife die 99 erreicht wird ist die gesamte Strecke abgeprüft worden und vorher hat kein break stattgefunden, somit ist dann auch sicher, dass nichts in der Sichtlinie ist.
artbasics ist offline   Mit Zitat antworten
Alt 16-12-2011, 16:40   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
Zitat:
Zitat von artbasics Beitrag anzeigen
.. und auf 100 Punkten dieser Linie im regelnmäßigen Abstand wird geprüft ob dieser Punkt mit dem Hinderniss kollidiert...
nur so, als 'auch eine möglichkeit':
H.G.Seib -> Position (ZIP) - guck: welche Personen kann 'ich' alle sehen
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (16-12-2011 um 16:42 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 16-12-2011, 16:47   #7 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Zitat:
Zitat von artbasics Beitrag anzeigen
Wenn in der Schleife die 99 erreicht wird ist die gesamte Strecke abgeprüft worden und vorher hat kein break stattgefunden, somit ist dann auch sicher, dass nichts in der Sichtlinie ist.
Das dürfte aber deutlich weniger perfomant sien, wenn man bedenkt, dass diese if-Abfrage bei jedem Event.ENTER_FRAME 99 Mal ausgeführt wird.
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 16-12-2011, 16:50   #8 (permalink)
Neuer User
 
Registriert seit: Jan 2011
Beiträge: 9
Die *.fla Dateien von dir kann ich leider allesamt nicht öffnen. Hatte ich schon einmal probiert als ich mich für was anderes interessiert habe. Flash CS4 stürzt dabei auf mehreren System immer ab.
artbasics ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash 8] galerie twenn frage - frage - (ruckelt beim over) beto2010 Flash Einsteiger 2 27-08-2010 03:47
Frage zu Flash Chat | und Frage zu Codinierung oconner Flash MX 2004 3 29-03-2006 23:24
Frage? vedo Flash MX 2004 3 16-01-2006 00:30
JS-Frage Nightflyer HTML und CSS 2 06-02-2004 15:25
FPS Frage Cpt.Shadow Flash 4 und Flash 5 3 15-04-2002 17:51


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele