[ActionScript 2] Problem z generowaniem liczb losowych


(Zabek05) #1

Witam. Piszę prostą gierkę polegającą na łapaniu postaci w radar. Problem polega na tym, że na czas robienia gry wstawiłem sobie okienko kontrolne z kątem poruszania się postaci i okazuje się, że nie porusza się ona pod takim kątem, jak wynikałoby to z tego okienka. Oto kod z ramki:

widzu._x = 239;
widzu._y = 214;
PredkoscWidza = 1;
KatWidza = Math.floor(Math.random() * 36) * 10 - 180;
Punkty = 0;
Widownia = 0;

onClipEvent (enterFrame) {
widzu._x = widzu._x + (Math.sin(KatWidza) * PredkoscWidza);
widzu._y = widzu._y + (Math.cos(KatWidza) * PredkoscWidza);
OdlegloscWidza = Math.sqrt(Math.pow((239 - widzu._x),2) + Math.pow((214 - widzu._y),2));
Edit39 = KatWidza;
Edit40 = radar._rotation;
Edit41 = PredkoscWidza;
if(KatWidza - 180 == radar._rotation)
{
widzu._x = 239;
widzu._y = 214;
KatWidza = Math.floor(Math.random() * 36) * 10;
PredkoscWidza = PredkoscWidza + 0.05;
Punkty = Punkty + Math.floor(28 - OdlegloscWidza / 12.5);
Widownia += 1;
}

if(OdlegloscWidza > 225)
{
gotoAndPlay ("Frame 3");
}


myListener = new Object(radar); 
 
myListener.onKeyDown = function () 
{ 
 if(Key.isDown(Key.LEFT)) radar._rotation = radar._rotation - 10; 
 if(Key.isDown(Key.RIGHT)) radar._rotation = radar._rotation + 10; 
 if(Key.isDown(Key.SPACE)) radar._rotation = radar._rotation - 180;  
} 
 
Key.addListener(myListener); }if(Key.isDown(Key.SPACE)) radar._rotation = radar._rotation - 180;  
} 
 
Key.addListener(myListener); }

Mam wrażenie, że kąt poruszania się postaci generuje się dwa razy (pierwszy raz na początku odtwarzania ramki, a drugi raz kiedy wykonywana jest pętla).

Co tu trzeba poprawić?


(Jim1961) #2

Dziwny ten fragment kodu, bo masz o dwie klamry zamykające więcej, niż otwierające. 

 

Dwa razy widać coś takiego: 

Key.addListener(myListener);

(Zabek05) #3

Poprawiłem :slight_smile:

 

Ale to nie to, o co mi chodzi.

Postać porusza się inaczej niż powinna i dlatego nie daje się złapać.

Dlaczego?


(Ryan) #4

W jaki sposób ktoś ma odpowiedzieć na pytanie “czemu postać porusza się inaczej, niż powinna”, skoro nie wyjaśniłeś jak powinna?

Co reprezentują te fragmenty kodu?

Poprawiłeś klamry i jaki jest kod obecnie?

Końcówka jest przypadkowo podwojona, czy błąd polega na czymś innym?

Zadaj pytanie jeszcze raz, opisz problem w sposób, który nie wymaga czytania w myślach, a będziesz miał szansę na uzyskanie odpowiedzi.


(Zabek05) #5

To znaczy tak:

 

Postać powinna poruszać się zgodnie z kątem, który jest w okienku, dajmy na to, Edit39.

W tym momencie skrypt nic sobie z niego nie robi i generuje inny kąt.

W okienku pisze np. -150 (w kierunku, który pokazuje wskazówka godzinowa o 11), a postać porusza się pod kątem 120 (godz. 4).

 

Chcę zrobić tak, aby ten kąt generował się tylko wtedy, kiedy postać zostaje złapana i zaczyna iść od środka, i żeby postać poruszała się zgodnie z tym kątem.

Wtedy mógłbym wywalić to okienko, a gierka działałaby dalej normalnie.

 

Co zrobić?


(Ryan) #6

Jeszcze raz zademonstrować kod. :wink:


(Zabek05) #7

 

 

Proszę bardzo :wink:

 

widzu._x = 239;
widzu._y = 214;
KatWidza = Math.floor(Math.random() * 36) * 10 - 180;
// w powyższej linijce generuje jedną liczbę
PredkoscWidza = 20;
Punkty = 0;
Widownia = 0;

onClipEvent (enterFrame) {
widzu._x = widzu._x + (Math.sin(KatWidza) * PredkoscWidza);
// a tu inną
widzu._y = widzu._y + (Math.cos(KatWidza) * PredkoscWidza);
OdlegloscWidza = Math.sqrt(Math.pow((239 - widzu._x),2) + Math.pow((214 - widzu._y),2));
Edit39 = KatWidza;
Edit40 = radar._rotation;
Edit41 = OdlegloscWidza;
}

if(KatWidza == radar._rotation)
{
widzu._x = 239;
widzu._y = 214;
KatWidza = Math.floor(Math.random() * 36) * 10;
PredkoscWidza = PredkoscWidza + 0.05;
Punkty = Punkty + Math.floor(28 - OdlegloscWidza / 12.5);
Widownia += 1;
}

if(OdlegloscWidza > 225)
{
gotoAndPlay ("Frame 3");
}

myListener = new Object(radar); 
 
myListener.onKeyDown = function () 
{ 
 if(Key.isDown(Key.LEFT)) radar._rotation = radar._rotation - 10; 
 if(Key.isDown(Key.RIGHT)) radar._rotation = radar._rotation + 10; 
 if(Key.isDown(Key.SPACE)) radar._rotation = radar._rotation - 180;  
}

Key.addListener(myListener);

O ile się nie mylę, w JS jest taka funkcja var, która “ustala” wartość losową dla całej sesji. Czy w AS2 jest coś takiego?