porozumiewanie się między ramkami

Odpowiedz Nowy wątek
2006-10-28 22:47

Rejestracja: 13 lat temu

Ostatnio: 13 lat temu

0

;-( to tylko część kodu problem jest tego typu że pierwsza ramka otwiera drugą i mam w pierwszej ramce zmienną pom='nic' i w drugiej ramce po naciśnięciu przycisku button wartość zmiennej pom ma się zmienić potrzebuję poczekać na naciśnięcie tego przycisku aby zmienić wartość pom jak to zrobić kombinowałem tak jak poniżej i czeka ale nie wykonuje elsa gdy już zmienię pom po wciśnięciu przycisku button w drugiej ramce
czekam na kogoś może pogadamy na ten temat

window.open("plansza.html","dwa");
if(pom == 'nic')czekaj()
else
alert('ok');

function czekaj()
{
if(pom != 'nic') return;
setTimeout ("czekaj()", 5000);
}

Pozostało 580 znaków

2006-10-29 01:12

Rejestracja: 15 lat temu

Ostatnio: 7 lat temu

0

nie wiem co to pom, a ten kod się mniej więcej tak wykonuje (pseudokod "jednowątkowy"):

window.open('plansza.html', 'dwa');
if(pom == 'nic'){
za5sek = true;
}
if(pom != 'nic'){
alert('ok');
}
if(za5sek)
goto czekaj;
return;

:czekaj
if(pom == 'nic'){
sleep(5000);
goto czekaj;
}

jak ma się ten alert wykonać ?
nie dokładnie rozumiem co chcesz uzyskać ale jak pobierasz tą zmienną z drugiej ramki ?


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-10-29 11:09

Rejestracja: 13 lat temu

Ostatnio: 13 lat temu

0

to jest ta druga ramka i ona ma zadanie w pierwszej pętli znalezienie pozycji w tablicy pole i wypisanie jej <ort>najwarzniejsze</ort> jest potem <ort>żut</ort> kostką naciskamy przycisk <ort>żut </ort>kostką i random ileś tam i pozycjai1 przypisujemy <ort>komurke</ort> w tablicy pole [ten żut kostką] teraz przypisujemy zmiennej pom w pierwszej ramce tą pozycje1 z drugiej ramki to kod ramki drugiej poniżej umieszcze kod ramki pierwszej i <ort>krutko</ort> opiszę o co chodzi pomóż mi bo widzę że wiesz o co chodzi

<html> <body> <center> <script language="javascript"> var pole=new Array(); var pozycja; var pozycja1; var k=0;var j=0; var żut = new String(); var żut1; pozycja=top.raz.ruch; pole=new Array("jaskinia","pole","miasto","równina","wioska","piekło","jezioro","gospoda","morze","góry","dolina","las","wzgórza"); for(var i=0;i<pole.length;i++) {="{" j++;="j++;" if(pole[i]="=pozycja)" k="j;" document.write("<h1="document.write(&quot;&lt;h1">"+pole[i]+"</h1>"); }} function los() { var gotowy =1+(6 * Math.random());//losowanie żut = "" + gotowy; żut = żut.substring(0,1); żut1=Number(żut); alert("żut kostką:"+żut); pozycja1=pole[(k+żut1)-1]; top.raz.pom=pozycja1;//przypisanie zmiennej pozycja1 do pom w pierwszej ramce alert(pozycja1); document.write("

"+pozycja1+"

"); } </script> <form name="ruchy"> <input type="button" value="żut kostką" onclick="los();"> </form> </body> </center> </html>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
to jest kod pierwszej ramki najważniejsze jest poczekać na zmianę wartości pom na wartość pozycja1 z drugiej ramki
<code class="html4strict">
<html>
<head><title>ruch</title></head>
<center>
<body><h1>Twoja postać</h1>
<script language="javascript">

var postacie2=new Array();
var ile;
var ruch;
var pom='nic';
ile=top.dwa.ile_graczy;//to jest zmienna pobrana z wcześniejszej drugiej ramki
postacie2=top.dwa.wybrana;//to jest zmienna pobrana z wcześniejszej drugiej ramki

for(var i=0;i<ile;i++)
{

document.write("<p><h3>"+postacie2[i][0]+"</h3></p>");//tutaj wypisuję tylko postacie2 mało ważne
document.write("<p>siła=:"+postacie2[i][2]+"</p>");
document.write("<p>moc=:"+postacie2[i][3]+"</p>");
document.write("<p>życie=:"+postacie2[i][4]+"</p>");
ruch=postacie2[i][7];                         
window.open("plansza.html","dwa"); //otwieram drugą ramke kod powyżej
if(pom == 'nic')wruć() tutaj chcę poczekać na wciśnięcie żutu w drugiej ramce aby zmienić pom
else{
alert('ok');//to przykładowo tutaj będę kończył pętle jak będę miał zmienioną zmienną pom 
}
}

function czekaj()
{
alert(pom);
if(pom != 'nic') return; 
setTimeout ("czekaj()", 5000); 
}

</script>
<br>
<center>
<form name="steruj">
<input type="button" value="wyświetl" onClick="czekaj(); return true;">//to mało potrzebne sprawdzam tylko tak dla siebie jak zmieniła się wartość pom
</form>
</center>
</body>
</html>

/////////////////////////////////////
jak będziesz chciał to mogę wysłać ci kod wszystkiego tylko podaj gdzie to ma być gra fajnie mi wszystko szło i <ort>zaangarzowałem</ort> się ale <ort>stanołem</ort> w miejscu prosze pomóż mi narazie

Pozostało 580 znaków

2006-10-29 12:12

Rejestracja: 15 lat temu

Ostatnio: 7 lat temu

0

no to po prostu wywołaj czekaj i razem z "return;" daj instrukcję które mają się wykonać przy zmianie pom
ale widzę że raczej tutaj to jest niemożliwe bo wykonujesz wszystko przy ładowaniu strony i dla każdego gracza
w takim razie myślę że jedyna możliwość to przebudowanie calutkiego skryptu aby dało to się robić po załadowaniu
ogólnie wydaje mi się że robisz taką prowizorkę a wszystko raczej dałoby się zrobić na jednej stronie bez używania ramek

poza tym już tak OT - napisałeś poprawnie "wrzuć" a już "rzut" nie potrafiłeś - przy okazji zmiennych i funkcji w js nie nazywaj używając polskich znaków


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-10-29 12:29

Rejestracja: 13 lat temu

Ostatnio: 13 lat temu

0

a nie można użyć etykiety i goto żeby wrócić do pętli ze zmienioną "pom"?tylko nie wiem jak a tak wogóle to moje początki w javascript więc napewno to będzie prowizorka ale będę zadowolony gdy będzie działało.pozdro

Pozostało 580 znaków

2006-10-29 19:15

Rejestracja: 15 lat temu

Ostatnio: 7 lat temu

0

nie
proponuję tak (niesprawdzane):

function docwrite(text){
  document.body.innerHTML += text;
}

function gcontinue(i){
  if(i >= ile) return;
  docwrite("<p><h3>"+postacie2[i][0]+"</h3></p>");//tutaj wypisuję tylko postacie2 mało ważne
  docwrite("<p>siła=:"+postacie2[i][2]+"</p>");
  docwrite("<p>moc=:"+postacie2[i][3]+"</p>");
  docwrite("<p>życie=:"+postacie2[i][4]+"</p>");
  ruch=postacie2[i][7];                         
  window.open("plansza.html","dwa"); //otwieram drugą ramke kod powyżej
  gwait(i);
}

function gwait(i){
  if(pom == 'nic')
    return setTimeout('gwait(' + i + ')', 1000);

  alert('ok'); // to przykładowo tutaj będę kończył pętle jak będę miał zmienioną zmienną pom

  pom = 'nic';
  gcontinue(i + 1);
}

onload = function(){
  gcontinue(0);
}

Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-10-30 23:47

Rejestracja: 13 lat temu

Ostatnio: 13 lat temu

0

działa wielkie dzięki ale mam jeszcze pytanko bo funkcja
function docwrite(text){
document.body.innerHTML += text;
dopisuje tekst na końcu dokumentu a jakbym chciał w pętli wypisywać jeden tekst na drugi?
poprostu jak pom!='nic' to ustawiam pom znowu na 'nic' zwiększam 'i' wywołuję funkcje gcontinue(i) i znowu wypisuję ale nie chcę pod spodem wypisywać tylko w miejsce poprzedniego

Pozostało 580 znaków

2006-10-31 00:12

Rejestracja: 15 lat temu

Ostatnio: 7 lat temu

0

no to można tak:

function $(id){
  return (document.getElementById ? document.getElementById(id) :
           (document.all ? document.all[id] :
             document[id]
           )
         );
}

function docclear(id){
  $(id).innerHTML = '';
}

function docwrite(id, text){
  $(id).innerHTML += text;
}

function gcontinue(i){
  if(i >= ile) return;
  docclear('tomiejsce');
  docwrite('tomiejsce', "<p><h3>"+postacie2[i][0]+"</h3></p>");//tutaj wypisuję tylko postacie2 mało ważne
  docwrite('tomiejsce', "<p>siła=:"+postacie2[i][2]+"</p>");

...
...
...
</script>

<span id="tomiejsce">
  to właśnie tutaj wszystko będzie wypisywane
</span>

Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-10-31 00:27

Rejestracja: 13 lat temu

Ostatnio: 13 lat temu

0

wszędzie w miejsce id mam wpisywać "tomiejsce" czy przepisać tak jak jest oprócz 'to właśnie tutaj wszystko będzie wypisywane' bo przepisałem tak jak jest i nie działa jak możesz zobacz jeszcze ten kod jak będzie działać muszę wziąć książkę i wszystko zrozumieć z tym wypisywaniem bo nic tu nie kumam.Tamto wcześniejsze z czekaniem na zmienną rozumię oprucz-return setTimeout('gwait(' + i + ')', 1000);dlaczego nie można było tego 'i' normalnie wpisać?return setTimeout('gwait(i)', 1000);widzę że długa droga przedemną w studiowaniu javascript.

Pozostało 580 znaków

2006-10-31 11:12

Rejestracja: 13 lat temu

Ostatnio: 13 lat temu

0

super działa.jestem happy teraz na podstawie tego mogę przerabiać w mojej grze jak chcę już kumam większość tego co mi pomogłeś bo trochę poczytałem ale mam dwa pytanka :
return setTimeout('gwait(' + i + ')', 1000);dlaczego nie można było tego 'i' normalnie wpisać?return setTimeout('gwait(i)', 1000);
a drugie dziąłanie funkcji $ co ana sprawdza i kiedy z niej wychodzimy bo widzę że przy czyszczeniu jak i wypisywaniu wywołujemy ją.Z góry bardzo dziękuję za pomoc przez co moja wiedza zwiększyła się o pare leveli:)

Pozostało 580 znaków

2006-10-31 15:29

Rejestracja: 15 lat temu

Ostatnio: 7 lat temu

0

$ to tylko taki skrót tylko od document.getElementById czyli zwraca element o podanym w parametrze identyfikatorze, a potem z tym elementem już można robić co się chce (jak na przykład przypisać mu kod przez IEowski innerHTML)

trzeba raczej 'gwait(' + i + ')' bo kod podany w pierwszym parametrze setTimeout nie jest od razu parsowany ale dopiero po upłynięciu czasu podanego w drugim parametrze, a po tym czasie już na pewno wychodzi z funkcji i zapomina co miało w i, zresztą nawet jeśli to kod ten się wykonuje jakby spoza jakiejkolwiek funkcji więc przeglądarka by próbowała wykonać:

gwait(i);

a "i" byłoby nie zainicjowane więc mógłby wyskoczyć błąd, a dając w pierwszym parametrze:

'gwait(' + i + ')'

funkcja setTimeout zapamiętuje jako kod do wykonania ciąg gwait(5); (przy i równym 5) i potem już nie ma problemu z jego wykonaniem

a return jest tylko po to żeby wyjść z funkcji, można by było zwrócić cokolwiek czy nic ale żeby kod był krótszy ... poza tym taka postać umożliwia ewentualne zatrzymanie odliczania do wykonania gwait


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0