• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

pacman

dan

New member
hallo!
ich bitte euch, mir wiederum zu helfen...

also:
pacman kennt nimm ich an jeder

beispielsweise soll ich, wenn pacman in einem gewissen bereich ist und der geist5 auch, dann soll der zum pacman wandern...
wenn ihr das ned ganz gecheckt habt, egal, tut nichts zur sache ;)

was ich konkret brauche:

if (xkoordinate vom pacman<500) && (xkoordinate vom pacman>400) && (xkoordinate vom geist5<500) && (xkoordinate vom geist4>400)

hm, nur ich hab keine idee wie ich das machen könnte... wohin ist mir klar (in meinem programm) mir ist auch klar, wie dann der if-block verläuft, aber nicht die bedingung... bitte helft mir ... bin echt ratlos
ach ja, pacman=instanzname, gegner5 = instanzname
geht es vllt so?

if (_x.pacman<500) && usw?


das selbe auch mit den y-koordinaten aber das geht dann ja analog...

aber ich denk mal, ihr wisst worum es geht ;)
danke schonmal im voraus und hoffe ich hab mich klar und verständlcih ausgedrückt

greetz
dan
 
ne, fixer bereich...
wenn pacman rechts unten ist, und gegner5 in der nähe, soll er den weg einschlagen ;)
 
da sind doch sicherlich auch wände dazwischen und der weg müßte doch idealer weise nicht direkt sondern
über eckpunkt laufen!?
also wenns ein pacman spiel sein soll, sollte es doch so sein?

also wäre es angebracht wegpunkt zu setzten. über die pacman und die geister wandlen.
und so kannst du auch leichter die position des pacman und der geister feststellen und steuern.

bsp zum script aufbau um geister umzusteuern:
Code:
if(pacman_geist_umligende_positionen() == true){  // pacman_geist_umligende_positionen() ist ein funktionsaufruf der true oder false wiedergibt 
geist_lauf_ziel = pacman_lauf_ziel; 
}

function pacman_geist_umligende_positionen(){  // funktion soll prüfen ob pacmans wegpunkt in irgendeiner himmelsrichtung vom geist liegt
 if(pacman_lauf_ziel==geist_umligende_positionen-nord){
  return true;
 }
 if(pacman_lauf_ziel==geist_umligende_positionen-sued){
  return true;
 }
 if(pacman_lauf_ziel==geist_umligende_positionen-west){
  return true;
 }
 if(pacman_lauf_ziel==geist_umligende_positionen-ost){
  return true;
 }
return false;
}
vorrausgesetzt ist natürlich das die benötigten variabeln auch gesetzt werden...
 
Also zunächst solltest Du Dir überlegen, ob Du einen runden oder einen rechteckigen Annäherungsrahmen brauchst. Der runde erfordert Trigonometrie und Fließkomma Rechnung, ein eckiger Rahmen kommt mit Integer Zahlen aus.

Unabhängig davon treffen die Geister alle n Zeiteinheiten eine Entscheidung, ob sie in der eingeschlagenen Richtung weiter laufen, umdrehen oder abbiegen. Laufen sie auf eine Wand ist gfs. eine außerordentliche Entscheidung notwendig (sonst würde die Geister erstmal an die Wand klatschen und sich erst zum nächsten Entscheidungszeitpunkt wieder aufraffen). Normalerweise sind diese Entscheidungen rein zufällig, bzw. unterliegen einer nicht zielgerichteten Verteilung (als Ziel könnte man höchstens Patrouille angeben). Anders wird dies jedoch, wenn der Spieler in den Annäherungsrahmen tritt. Ab dann werden alle Entscheidungen so getroffen, dass die Distanz zum Spieler verkürzt wird.
Beim rechteckigen Rahmen wird dabei einfach deltaX und deltaY geschaut (wobei deltaX = spielerX - geistX). Je nach dem, ob die Deltas positiv oder negativ sind, fällt eine Entscheidung zugunsten Nord, Süd, Ost oder West aus. Zusammen mit den zum Zeitpunkt möglichen Optionen sollte ein Weg gefunden werden, der die Distanz verkürzt. Dabei kann man natürlich versuchen den größeren der Delta Werte als erstes zu verkleinern.

Eine andere Alternative wäre den Geist nicht permanent über sein Schiksal entscheiden zu lassen, sondern einmal eine Entscheidung oder einen Weg für die nächsten n Bewegungseinheiten festzulegen (per Zufall, bzw. den aktuellen Umständen entsprechend), um dann auf dem Weg dorthin immer nur zu gucken, ob denn der Weg noch "optimal" ist, oder ob es inzwischen eine Situation gibt, die ein "Umdenken" erfordert. Der nächste Weg wird aber erst wieder fesgelegt, wenn der alte Wegpunkt erreicht ist, bzw. die Route durch aktuelle Ereignisse über den Haufen geworfen wurde.

Je weiter man dies ausklügelt könnte man bei Eintreten des Spielers in den Annäherungsrahmen die optimale Route zwischen Spieler und Geist berechnen und dem Geist als Wegpunkte geben. Da der Spieler sich allerdings auch bewegt wäre eine solche Liste sicherlich nur von kurzer Aktualität und der damit verbundene hohe Rechenaufwand für die Katz'.

Variante 1 ist natürlich die einfachste, allerdings muss man aufpassen dass die Geister sich nicht in einer Ecke festsetzen, wenn der Spieler auf der anderen Seite der Ecke steht.

Soweit die Theorie.... ;)
 
hm, dann muss ich wohl gleich im gleichen atemzug sagen: danke und sry (dass soviel geschrieben hast ;))...

also, hab mich ned wirklich klar ausgedrückt ;)

also:

es gibt wegpunkte, wenn ein geist zu diesem wegpunkt kommt, wird eine zufallszahl ermittelt
ist diese 0 geht er nach oben, ist sie 1, geht er nach unten usw.usf.

jetzt soll er, wenn der pacman sich in dem bereichbefindet, der keinen ausweg hat ;), nicht mehr rauskommen... denn wenn der geist zu diesem wendepunkt kommt, soll nicht mehr die zufallszahl ermittelt werden, sondern ihm gleich die richtung vorgegeben werden, soweit so gut... wie das geht, kann ich auch (praktisch gesehen)...
nur für die if-anweisung brauch ich hilfe also:
if (KANN ICH NICHT*)
Block (kann ich)

zu *:
ich muss einfach wissen, wie ich drauf komme, ob der pacman in dem besagten bereich ist...


also, zusammengefasst:
das einzige was ich brauche ist, wie ich definieren kann, OB der pacman in dem bereich ist, daher brauche ich das folgende in flashscript-form:

if (x-koordinate von pacman liegt zwischen 325 und 475) && (y-koordinate von pacman liegt zwischen 250 und 310)

das wars auch schon, was ich bräuchte, nur da bin ich ratlos...
also ich denk mal, das wird so aussehen:
if (x-koordinate von pacman >325) && (x von pacman <475) && (y von pacman >250) && (y von pacman < 310)

nur wie ich die koordinaten angebe, hab ich keine ahnung...
_x._root.pacman>325 wird wohl nicht stimmen ;)

hoffe jetzt ists klar, was ich brauche ;)
 
dan schrieb:
mir ist grad ne idee gekommen:
with (_root.pacman){
if (_x>325)
}
wäre das möglich?

Wie sollen wir hierüber eine Aussage treffen, der einzige, der die Struktur Deiner .fla kennt, das bist Du...
Schließlich kann man sowas auf tausend(*) verschiedenen Wegen realisieren.

(*) Näherungswert
 
hm :cool:

naja, ich ahb ja keine ahnung wie ichs amchen soll ;) deshalb wars ja nur blind geraten
es geht mir darum, dass ich irgendwie die x-koordinate von pacman erfasse und die frage ist, ob ich das so kann, ob dies was ich dir grad vorher geschreiben habe, eine der ~1000 möglichkeiten ist ;)

wennde willst kann ich dir die fla ja mal schicken.. bzw wennde mir sagst wie ichs hochladen kann, lad ichseben hoch
 
mußt du rechnen tun ;)
also wenn der geist im quadrat vom pacman (zb 100px+ -) auftaucht soll der geist sich zu ihn bewegen.
also hat pacman ein quadratisches feld von 200px.
du mußt also prüfen ob der geist in diesm quardrat ist!

pacman ist bei position 100x und 100y.

also:
der geist muß sich auf der x und y achse zwichen 0(100-100) und 200(100+100)
befinden.

geist._x>=pacman._x-100
geist._x<=pacman._x+100
geist._y>=pacman._y-100
geist._y<=pacman._y+100

bsp:
Code:
if(geist._x>=pacman._x-100 && geist._x<=pacman._x+100 && geist._y>=pacman._y-100 && geist._y<=pacman._y+100)
 
das wäre die lösung gewesen :

Code:
for(i=1;i<=5;i++){
   if(this.hitTest(_root["gegner"+i])){
		

    neueRichtung=Math.ceil(Math.random()*3);

      with(_root["gegner"+i]){


	if (_root.Pacman._x>=330 && _root.Pacman._y>=250) {


danke für alles!

und wie würde es gehen, wenn es dynamisch sein sollte?

oder ist das zu kompliziert?


vielen dank für eure hilfe!
thx
dan
 
Zurück
Oben