HelloWorld Applet - błąd Out of Skills

0

Umyśliłem sobie napisać hello world jako aplet z odbijającym się wiadomym napisem. Natrafiłem jednak na błąd logiczny. Napis helloworld owszem - rusza się, ale nie odbija od krawędzi apletu. Używam następującej procedury do poruszania:

ActionListener moveit = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          hworld_position = hworld.getLocation(hworld_position);
          if ((hworld_position.x == 0) || (hworld_position.x+hworld.getWidth()==HiWorld.WIDTH)){xspeed=-xspeed;}
          if ((hworld_position.y == 0) || (hworld_position.y+hworld.getHeight()==HiWorld.HEIGHT)){yspeed=-yspeed;}
          hworld_position.x+= xspeed;
          hworld_position.y+=yspeed;
          hworld.setLocation(hworld_position);}
      };

Oczywiście problemem są ify, ale nie wiem jak inaczej pobrać wysokość/szerokość apletu.
Wyjaśnienie zmiennych: hworld jest obiektem klasy JLabel, xspeed/yspeed to wiadomo, a hworld_position to obiekt Point.

Ogólnie to uczę się w NetBeans, bo nie podoba mi się, że w zwykłym JDK muszę ustawiać pozycje poszczególnych obiektów w kodzie. NetBeans ma fajny generator podobny do tego z Delphi co bardzo mi ułatwia tworzenie. Gorąco polecam to środowisko.

//EDIT: Od razu mówię, że jestem początkujący, stąd typ programu. Algorytm jest na 100% dobry, bo wielokrotnie go używałem (wprawdzie w innych językach, ale algorytm to algorytm). Problem jest tak jak mówię w ifach.

0

A czy jestes pewien, ze w if'ach powinno byc "==" ? :> Daj tam >= max i <= 0.

0

a może błąd siedzi w tym, że zmienne 'xspeed' oraz 'yspeed' są większe od 1 (mniejsze od -1?)? Wtedy warunek == może nie trafiać, np. dla współrzędnych kolejno, z xspeed=-2:

1. x = 5
2. x = 3
3. x = 1
4. x = -1

x nie trafił w warunek, aby zacząć poruszać się w drugim kierunku, wyjeżdża więc w nieskończoność za ekran. Zamiast == zastosuj >=/<=, powinno rozwiązać problem, jeżeli w tym siedzi.

0
Billy napisał(a)

a może błąd siedzi w tym, że zmienne 'xspeed' oraz 'yspeed' są większe od 1 (mniejsze od -1?)? Wtedy warunek == może nie trafiać, np. dla współrzędnych kolejno, z xspeed=-2:

1. x = 5
2. x = 3
3. x = 1
4. x = -1

x nie trafił w warunek, aby zacząć poruszać się w drugim kierunku, wyjeżdża więc w nieskończoność za ekran. Zamiast == zastosuj >=/<=, powinno rozwiązać problem, jeżeli w tym siedzi.

Hmm... To możliwe. Sprawdzę i poinformuję o rezultacie.
//edit: Ify wyglądają teraz tak:

if ((hworld_position.x <= 0) || (hworld_position.x+hworld.getWidth()>=HiWorld.WIDTH)){xspeed=-xspeed;}
if ((hworld_position.y <= 0) || (hworld_position.y+hworld.getHeight()>=HiWorld.HEIGHT)){yspeed=-yspeed;}

Rezultat? Napis "trzęsie" się.

0

jaka jest pozycja startowa? Nie wchodzi w grę przypadek, kiedy napis 'wleciałby' za daleko w lewo, by potem jedna pętla 'nie wyciągnęła go stamtąd' w efekcie się blokując (następna by go 'nie wyciągnęła', a przestawiła kierunek przesuwania, i tak już w kółko). Jeżeli jednak pozycja startowa jest zła (ujemna, albo równa 0 + napis startujący od poruszania się w lewo, albo analogicznie za duża, etc) to taka sytuacja zablokowania się, jest możliwa.

Ewentualnie plansza jest za mała :)

0

Pseudokod:

x += xspeed;
if (x <= 0) {
  xspeed = -xspeed;
  x = 1; // !!!
} else
if (x+szer >= maxWidth) {
  xspeed =-xspeed;
  x = maxWidth - szer - 1;
}
0

Już wszystko dobrze - problemem było to, że robiłem bezpośrednio na JAppletForm, zamiast najpierw dać JPanel i nie ustawiłem żądanego rozmiaru apletu w init. Co do ifów, to nie musiałem zmieniać. [losowa nazwa], twój kod okazał się niepotrzebny, ale dzięki.

//EDIT: Co proponujecie jako kolejną aplikację w Javie w charakterze ćwiczenia (znaczy do napisania), bo HelloWorld mam już za sobą, a chcę dalej ćwiczyć, bo jak będę umiał Javę, to pracę jako programista mam praktycznie w kieszeni. A nie mam pomysłu na kolejne ćwiczenia.

0

Na początek polecam pisanie prostych gier: tetris, snake, itp.

W pracy (przynajmniej mojej) nie przydają się jednak aplety, czy Swing, a Java EE, Hibernate i Spring.

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