Kilka pytań odnośnie możliwości i bibliotek javy.

0

Witam,
Pracuję obecnie nad grą przeglądarkową w javie. Moja wiedza na temat programowania pozwoliła stworzyć grę w którą można grać na razie lokalnie na PC. W przyszłości chcę umieścić grę na serwerze i udostępnić ją graczom poprzez granie w applecie java. Chciałbym aby gracze mogli się rejestrować na stronie www i zbierać statystyki. Mam do Was pytanie czy będzie to możliwe do zrobienia za pomocą interfejsu JDBC, który będzie kontaktował się z serwerem obsługującym SQL ? Czy jest to dobra idea?
Drugie pytanie dotyczy interfejsu graficznego. Zamierzam zrobić grafikę w blenderze gdyż tam coś potrafię. Czy jest możliwość w dość prosty sposób zaimplementowania grafiki w javie z blendera?

1

Jeśli udostępnisz JDBC to na 100% ludzie zhakują ci bazę. Opracuj jakiś protokół i puść grę po socketach.

Czy jest możliwość w dość prosty sposób zaimplementowania grafiki w javie z blendera?

Chodzi o załadowanie obiektów trójwymiarowych, ich animację, itd? Jeśli tak to szukasz silnika 3D takiego jak np jMonkeyEngine.

0

Stosowanie appletów na stronach internetowych to niezbyt przyszłościowe myślenie. Już dawno przestało się tworzyć applety javy do czegokolwiek na stronach. Już więcej jest Flash'a, HTML5, Unity3D. Jeśli chcesz sam implementować renderowanie grafiki 3D w Javie z użyciem jakiegoś wrappera do OpenGL, to najprościej będzie zrealizować loader nieanimowanych modeli 3D w formacie Wavefront OBJ. Jak znajdziesz jakiś silnik 3D do Javy - np. ten, który podał Wibowit, to po prostu sprawdź, czy ten silnik dostarcza eksportery do Blender'a.

0

Niektóre propozycje podane przez Was wymagały by napisania kodu gry od nowa co nie wchodzi w rachubę (np. w Unity3D trzeba posługiwać się JavaScript lub C#). Skoro mam już napisany kompletny kod w javie, to jakie będzie teraz najlepsze rozwiązanie, aby uruchomić grę w przeglądarce? Rozumiem, że JDBC odpada ze względu na bezpieczeństwo? Oraz forma apletu jest nieprzyszłościowa? Co jeszcze w takiej sytuacji zostaje?

Co do grafiki to chcę zaimportować animacje 3D, bądź 2D które nie będą kontrolowane przez gracza, tzn animacje będą odtwarzać się po akcji gracza.

1

Raz piszesz, że masz kompletny kod, a zaraz obok, że ci sporo brakuje.

JMonkeyEngine to silnik 3D dla Javy, a więc można pisać w nim w Javie.

Tworzenie połączenia JDBC między klientem końcowym, a użytkownikiem jest jedną wielką dziurą bezpieczeństwa. Kod w Javie łatwo zmodyfikować, więc ludzie pchaliby swoje zapytania SQL, dzięki którym mogliby robić co chcą z twoją bazą.

Czy z formą apletu jest coś nie tak? Hmmm, to że apletów jest mało nie oznacza, że z apletami jest coś źle. Minecraft dla przykładu może działać jako aplet. Poza tym, różnica między JApplet a JFrame nie jest jakaś wielka i bez problemu możesz zrobić grę działającą pod obiema postaciami.

0

Chodziło mi oto że mam kompletną mechanikę gry w javie z interfejsem GUI swing. Do zrobienia mam animacje (najprawdopodobniej w blenderze) którą chcę "wpleść" w mój interfejs i całą zabawę z połączeniem gry z bazą danych.

Zajmijmy się na razie bazą danych.
Idea jest taka, żeby kupić sobie serwer z obsługą SQL zrobić bazę danych graczy i podłączyć ją w pewien sposób z grą. Jestem samoukiem w tej dziedzinie i dotychczas napotkałem na JDBC które wydawało mi się standardowym pomysłem dla programowania w javie.

Czyli połączenie (w najogólniejszym przypadku) :

(Klijent -> JDBC) ->---protokół bazy danych -> serwer bazy danych

Można wydaje mi się zastosować również typ połączenia trójwarstwowego:

Klijent >------HTTP,RMI---------->(warstwa pośrednia/JDBC)>-----protokół bazy danych------>Serwer bazy danych

Jeśli jest to nie do przyjęcia, jakie inne warianty są możliwe dla apletów javy?? Proszę tylko o podanie różnych sposobów i opinii, sam będę musiał wybrać i nauczyć się wybranej tematyki.

3
  1. Wymyślasz protokół, np będzie w nim polecenie: "Podaj listę wyników".
  2. Robisz serwer gry, który przyjmuje polecenia, rozpoznaje i wykonuje je, a potem odsyła odpowiedzi.
  3. Serwer gry ma połączenie JDBC z serwerem SQL.
  4. Klienci mają tylko połączenie z serwerem gry, mogą mu wysyłać tylko polecenia w ustalonym przez ciebie formacie; żadnego SQLa.
  5. Serwer gry możesz spokojnie napisać w Javie.
  6. Najlepiej aby serwer gry i serwer SQL były bardzo blisko siebie.
0

Doba idea dzięki za podanie koncepcji.
Rozumiem, że na przyszłość unikać sytuacji, aby serwer z grą był na tym samym serwerze co baza danych?
Chyba będzie to najlepsze rozwiązanie, gdyż nie mam problemów technicznych odnośnie dobrych serwerów.

2

Źle zrozumiałeś. Serwer gry (program) najlepiej jakby był na tym samym serwerze (sprzęt) co serwer bazy danych (program). To czego masz unikać, to pchania SQLa od gracza do serwera.

0

To oczywiście, że tak . Chyba się nie zrozumieliśmy. Nie miałem zamiaru pozwolić manipulować bazą danych graczom. Komunikacja będzie odbywać się
Gracz >> Program/gra/serwer1 >> baza danych/serwer1

bądź dla większego bezpieczeństwa:
Gracz >> Program/gra/serwer1 >> baza danych/serwer2

Zaś niemożliwe Gracz >> baza danych

Czy teraz dobrze to ująłem?

0

Teraz tak. O ile "nie miałem zamiaru pozwolić manipulować bazą danych graczom" oznacza "nie będzie żadnego pchania SQL od apleta do serwera".

0

Teraz już się chyba rozumiemy.
Jeszcze pytanie odnośnie grafiki. Gdyby standardowa biblioteka Java2D (Graphics2D) nie wystarczała o co lepiej poszerzyć swoją wiedzę:

1.Slick2D
2.JBox2D
3.JavaFX
4.jMonkeyEngine 3.0

Zaznaczę że na mechanice ogólnej znam się lepiej niż na programowaniu więc z modelowaniem fizyki nie mam problemów.

1

Podałeś cztery biblioteki, a wszystkie służą do czegoś innego:

  1. Silnik grafiki 2D
  2. Silnik fizyki 2D
  3. Następca Swinga
  4. Silnik grafiki 3D na shaderach OpenGL

To czego powinieneś się nauczyć zależy od tego czego będziesz potrzebował.

0

Witam ponownie!
Mam jeszcze jedną kwestię do rozwiązania tzn. Jeśli mam teraz zbudowany interfejs użytkownika w Java2d tj. Swing i teraz będę chciał "dołączać" elementy grafiki z Blendera za pomocą Java3D. To czy jest taka możliwość, aby jednocześnie wyświetlać elementy Java3D i Java2D (np. mieć trzy panele: na wschodzie i zachodzie w Java2D,
a centrum Java3D)

Bo jak wiadomo wszystkie elementy interfejsu swing muszą znajdować się w kontenerze, do którego dodajemy panele, tj.
Container powierzchniaZaw=getContentPane()

A elementy interfejsu Java3D znajdują się we "wszechświecie" do którego dodajemy "BranchGroup'y"
SimpleUnierse uni=new SimpleUniverse()

Najprostszym sposobem wydaje mi się utworzenie "wszechświata" na w Panelu Centrum, który dziedziczy po JPanel tj.

 
(...)
Java2d panel=new Java2d()
add(panel,BorderLayout.Center);
(...)

class Java2d extends JPanel
{
public Java2d()
{
 SimpleUnierse uni=new SimpleUniverse()
BranchGroup grupa=new BranchGroup();
grupa.addChild();
etc....
}

ale czy to będzie miało prawo zadziałać?

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