zabek05
(Zabek05)
2 Lipiec 2014 12:03
#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
(Jim1961)
2 Lipiec 2014 19:48
#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
(Zabek05)
2 Lipiec 2014 23:07
#3
Poprawiłem
Ale to nie to, o co mi chodzi.
Postać porusza się inaczej niż powinna i dlatego nie daje się złapać.
Dlaczego?
Ryan
(Ryan)
3 Lipiec 2014 19:56
#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
(Zabek05)
4 Lipiec 2014 15:10
#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
(Ryan)
5 Lipiec 2014 08:30
#6
Jeszcze raz zademonstrować kod.
zabek05
(Zabek05)
5 Lipiec 2014 11:12
#7
Proszę bardzo
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?