porozumiewanie się między ramkami

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);
}

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 ?

0

to jest ta druga ramka i ona ma zadanie w pierwszej pętli znalezienie pozycji w tablicy pole i wypisanie jej ort! jest potem ort! kostką naciskamy przycisk <ort>żut </ort>kostką i random ileś tam i pozycjai1 przypisujemy 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! 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++;
if(pole[i]==pozycja)
{
k=j;
document.write("

"+pole[i]+"

");
}}</p>

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+"

");
}</p> </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 <html> <head><title>ruch</title></head> <center> <body>

Twoja postać

<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("

"+postacie2[i][0]+"

</p>");//tutaj wypisuję tylko postacie2 mało ważne
document.write("

siła=:"+postacie2[i][2]+"

");
document.write("

moc=:"+postacie2[i][3]+"

");
document.write("

życie=:"+postacie2[i][4]+"

");
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
}
}</p>

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

</script>
<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
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

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 w ogóle to moje początki w javascript więc na pewno to będzie prowizorka ale będę zadowolony gdy będzie działało.pozdro

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);
}
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?
po prostu 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

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>
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ą rozumiem 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.

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:)

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

0

dlaczego nie wypisuje?

<html> <body>

aaaaaa</h1>

///////////////////////////// tu chcę wypisać <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;" docclear("wypisz");="docclear(&quot;wypisz&quot;);" docwrite("wypisz","<p="docwrite(&quot;wypisz&quot;,&quot;&lt;p">"+pole[i]+"</p>");//////////////////////////// to chcę wypisać }} function los() { var gotowy =1+(6 * Math.random()); żut = "" + gotowy; żut = żut.substring(0,1); żut1=Number(żut); alert("żut kostką:"+żut); pozycja1=pole[(k+żut1)-1]; top.raz.pom = pozycja1; alert(pozycja1); } function h(id){ return (document.getElementById ? document.getElementById(id) : (document.all ? document.all[id] : document[id]) ); } function docclear(id){ h(id).innerHTML = ''; } function docwrite(id, text){ h(id).innerHTML += text; } </script>
0

po pierwsze to w złej kolejności zamknąłeś tagi, masz:

aaaaaa</h1>

zamiast:

aaaaaa

</h1>

po drugie nie stosuj polskich liter w nazwach zmiennych i funkcji
po trzecie korzystasz z funkcji docwrite która jeszcze nie jest zadeklarowana (jest niżej więc parser jej jeszcze nie widzi)

a po czwarte to skoro korzystasz tylko z jednego miejsca do wypisywania to możesz zmienić funkcje:

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

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

na

function docclear(){
h('wypisz').innerHTML = '';
}

function docwrite(text){
h('wypisz').innerHTML += text;
}

i wtedy zamiast:

docclear("wypisz");
docwrite("wypisz","

"+pole[i]+"

");</p>

można już pisać

docclear();
docwrite("

"+pole[i]+"

");</p>
0

jeszcze zmieniłem
docwrite("wypisz","

"+pole[i]+"

");
na
docwrite("wypisz",pole[i]); coś nie działało z tym


a może wiesz jak zrobić bo w funkcji los będę zmieniał napis na pozycja po rzucie kostką i po tym napisie nie będę chciał przycisku 'rzut'.można document.write i napis ale może da się po prostu jakoś zrobić aby po napisie przycisk rzut zniknął?

0

daj przyciskowi id="przycisk" i potem jak chcesz go zniknąć to piszesz:

$('przycisk').style.display = 'none';

a pojawić:

$('przycisk').style.display = '';

0

działa dzięki

0

te dwie ramki działają jak chciałem.Dalej będzie działało to w ten sposób że postać będzie się ruszać no i jak stanie na jakieś pole to trzeba będzie wykonać instrukcje które będą zapisane na tym polu ewentualnie nawet chwilowo zmienić to pole gdy wyciągnie kartę bo będzie pisało że czeba losować kartę i na tej karcie będzie walka to jak przegra tą walkę to ten wróg zostanie na tym polu i jak następnym razem ktoś stanie na to pole to nie będzie losował karty tylko będzie musiał walczyć.Generalnie chcę poruszać się na tych ramkach co teraz mam i po ruchu ładować to pole na którym stanąłem i ewentualnie coś w nim zmienić zapisać i dalej się ruszać.Myślałem o jakiś plikach które będą miąły zapisane instrukcje do określonego pola i w razie stanięcia na tym polu ładować je zmienić jak będzie potrzeba i dalszy ruch.Jak tą sprawę rozwiązać ?po prostu naciskam rzut poruszam się na np wioskę i teraz chcę wykonać kod tej wioski nie zamykając tej ramki aktywnej gdzie jest los ani tej pierwszej.coś czytałem o tych przyciskach nawigacyjnych 'wstecz' i 'dalej' ale to chyba nie zdało by egzaminu jakbym pootwierał dziesiątki okien i miał się odnosić do każdej z nich.Jak masz jakiś pomysł to napisz ewentualnie podpowiedz mi co z książki przeczytać co by tutaj się nadawało?

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