Jak zrobić grę 3D typu sandbox

Witam! !!

Mam pytanie jak zrobić grę 3D z rodziny sandbox.Jakiego języka użyć (czy też programu) i jaki jest najlepszy program do tworzenia grafiki 3D.

I czy można do tego celu użyć JAVA jak w przypadku “Minecraft”.I chodzi mi też oto aby każdy świat generował się inaczej także i jak w przypadku “Minecraft-a”

Trochę o Minecraft

Dziękuję za odpowiedź.:slight_smile:

Cóż… pierwsze kroki najlepiej stawiać z http://warsztat.gd/tutorials.php :wink:

Jak pisać? Ostrożnie. Jeśli nie wiesz jak coś napisać, to znaczy, że przed Tobą jeszcze długa droga i musisz napisać dziesiątki innych, mniej złożonych rzeczy, zanim dotrzesz do projektu o którym obecnie myślisz. Zacznij od nauki języka (w zasadzie dowolnego) i za rok wróć do pomysłu pisania klonu Minecrafta.

Umiem Pisać W Visual Basic 2008 i wyżej także w JAVA

Ja umiem pisać w nano i vi, ale jeszcze kolejnego klona minecrafta nie napisałem.

Napisanie gry sandboxowej jest o wiele prostsze niż napisanie gry “do przejścia”, bo programujesz tylko cały świat i akcje bez obsługi “fabuły”, czyli do świata wchodzą gracze i się dzieje co chce.

Sama znajomość języka nie wystarczy, trzeba jeszcze umieć programować , a to jest trudniejsze niż sama nauka jednego języka.

Jeżeli chodzi o program do grafiki 3d polecam blendera: darmowy, lekki (paręnaście MiB), w miarę łatwy w obsłudze (trzeba poświęcić trochę czasu na poznanie niekonwencjonalnego interfejsu), ma wiele exporterów.

A do obsługi 3d w grach polecam irrlichta albo Ogre. Ewentualnie jak Java: LWJGL albo jMonkeyEngine.

Sądząc po tym jakie pytanie zadałeś, długa droga przed tobą. Ktoś kto na serio uczy się programowania i poznaje biblioteki, enginy i frameworki, sam dochodzi do tego, jak coś takiego napisać,

  1. Gry sandboksowe często mają fabułę (przeważnie wtedy sandbox jest “freeroamingowym” elementem gameplayu).

  2. Sandboksu nie programuje się łatwo: otwarty świat w większości wypadków wymaga strumieniowego doczytywania danych, a to zagadnienie bardzo złożone. Fizyka w otwartym świecie jest trudna do oprogramowania tak, żeby była stabilna (nawet Minecraft ma umowną fizykę i z racji skali świata objawia ona spore oboczności).

Ogólnie: nie jest to co piszesz prawdą.

Zależy jak na to spojrzeć: dla mnie obsługa fabuły byłaby trudniejsza od implementacji prostej pseudofizyki, takiej jaka jest w minecrafcie. W tej grze w zasadzie nie ma niczego więcej od tej prostej fizyki, “symulacji” cieczy, generowania terenu (to chyba najtrudniejsza część), craftingu i prostego AI.

W każdej grze z dużym światem trzeba ciągle doczytywać świat. Np. w takim Wiedźminie 2 non stop prawie muli HDD, a jak nie zdąży się załadować, to przerywa ekranem ładowania. W starszych grach również tak było: przechodzimy jeden krok i nagle pojawia się napis: “loading” (przykładowo Half-Life, Deus Ex). Różnica jest tylko taka że w tych starszych grach co wymieniłem ładowanie odbywa się w tym samym wątku co cała gra, a teraz usiłuje się to robić w tle, przez co się wydaje, że coś takiego nie ma w ogóle miejsca.

Akurat symulacja cieczy (nawet taka jak w MC) jest dużo trudniejsza do zaimplementowania niż generowanie terenu.

I nie, nie jest tak, że różnica polega na magicznym zrównolegleniu zadań. Różnica polega na tym, że tworząc sandbox musisz bardzo konserwatywnie budżetować zasoby, bo nie możesz mieć loadingu a nie chcesz mieć popupu obiektów/tekstur ani zwolnień. Streamowanie jest szalenie złożonym problemem i porównywanie korytarzowych gier, takich jak Wiedźmin czy Uncharted, do prawdziwych sandboksów jest kompletnie nie na miejscu. To zupełnie inny rząd złożoności.

Jak wspomniałeś Razi Blender jest dobry wiem że można w nim zrobić grę ale nie wiem czy da rady otwierać grę przez Blendera.I jak zrobić generator mapy.I Zapis.

Link do Głównym moim celem jest zrobienie gry podobnej do Minecraft Classic gdzie jest kilka bloków na 5 i można je niszczyć.http://www.minecraft.net/play.jsp

Blender Game

Po twoich pytaniach wydaje mi się że przed tobą na prawdę długa droga.

Sposobów na wygenerowanie mapy jest milion, podobnie jak zapisu.

Chodziło mi bardziej o zrobienie samych modeli w blenderze, a nie całej gry, choć się da.

Teraz bawię się 3D RAD,Google SketchUP 6 z pluingami do 3D RAD i 3ds max

Naucz się jakiejś biblioteki 3d. Jeżeli chcesz, żeby gra była dostępna na różne platformy to niech będzie to OpenGl, jednak jeżeli ma być to gra tylko pod windowsa to niech będzie to Direct 3d.

Co do języka to najlepiej gdyby był nim c++ ponieważ jest to język kompilowany do kodu maszynowego więc zapewnia bardzo dobrą wydajność.(Nie bez powodu pisze się w nim gry i systemy operacyjnie nie :lol: ?)

Java… No cóż, chyba każdy wie jak beznadziejnie minecraft działa…

“Java… No cóż, chyba każdy wie jak beznadziejnie minecraft działa…” rzekł użytkownik o nicku NetBeans, uniwersalnego IDE napisanego w całości w Javie.

Java jest kompilowana do bajtokodu, a bezpośrednio przed uruchomieniem do (tak jakby) maszynowego (nie może być wcześniej, bo by nie była niezależna systemowo).

Między Javą a C++ są już niezbyt duże różnice w czasie. Poza tym przy dzisiejszych komputerach ta różnica nie jest zauważalna za bardzo.

Uhm… Nie jest to prawdą? No nie jest, co potwierdza chociażby ostatni papier badający wydajność języków, który opublikowało Google. Zoptymalizowany przez kompilator kod w C++ był punktem odniesienia, do którego porównano wyniki działania kodu w innych językach. W najlepszym wypadku Java była 3.7x wolniejsza (przy ręcznym kręceniu parametrami kompilatora pod test, w przeciwnym wypadku byłaby wolniejsza 4.6x lub bardziej). Stąd zresztą popularność i przesadzony hype na Scalę ostatnimi czasy (nie mniej niż 2.5x wolniejsza niż kod w C++). Google Go też nie wypadło zbyt dobrze (5.5x wolniejsze).

NetBeans to nie gra i nie oczekuję, że będzie działała zawrotnie szybko…

To, że java jest kompilowana do bajtkodu nic praktycznie nie zmienia.

Popatrz jak wygląda uruchomienie programu napisanego w javie a jak w c++

Java:

Maszyna Wirtualna otwiera pliki z bytecodem -> sprawdzanie czy nie ma błędów -> wykonywanie kilku instrukcji -> sprawdzanie czy nie ma błędu -> wykonywanie kilku instrukcji -> itd…

C++

System operacyjny ładuję plik -> procesor wykonuje kod maszynowy

Zwykłe dodawanie w javie przekłada się na setki instrukcji procesora natomiast w c++ to około 5-7

Nawet sam mógłbym napisać prosty język programowania, nie kompilowany do bytecodu, który byłby szybszy od javy a to tylko dlatego, że robiłby wszystko jak leci zamiast szukać runetime errorów…

Ale co porównywali? Iteracyjne obliczanie silni? Bo tego typu testy jeszcze nie świadczą o wydajności… Ciekawe, czy przy porównaniu dużego systemu, wykonującego masę operacji, pracujący na wielu wątkach, z którego korzystają setki użytkowników wyniki byłyby takie same. ;]

No tak, programiści Google generalnie mają tendencję do trywializowania świata i robienie bezużytecznych, syntetycznych benchmarków. :wink: Wielu z nich nie grzeszy intelektem, ale przecież nie do tego stopnia. Test badał zdolność kompilatorów do radzenia sobie z pętlami, iterowaniem, adaptacją kodu wynikowego do architektury. Pętle - obok IO - stanowią “treść” aplikacji wymagających wydajności.

Takie benchmarki są bezużyteczne. Masz aplikacje napisane w C i Perlu. Obie wykonują to samo: liczą statystyki z danych ORAZ dokonują na tekście złożonych operacji przestawienia, wyboru, etc. Wyniki będą zbliżone, bo z jednym zadaniem C poradzi sobie świetnie, z drugim Perl. Wyniki absolutnie nic nie powiedzą Ci o zdolności języków (czy raczej: ich kompilatorów i/lub interpreterów) do raczenia sobie z konkretnym workloadem. A typowa “duża” aplikacja wykonuje dziesiątki różnorodnych operacji.

Nie wiem, co badały te testy, nie byłeś łaskaw zarzucić linkiem, więc sobie zgaduję. :wink:

Programiści Google nie potrafią sprawić, aby ich w przeglądarce karty nie zwężały się wraz z wzrostem ich liczby, więc w zasadzie możesz mieć rację co do ich intelektu.

Mi natomiast chodziło o opieranie się wyłącznie na wynikach takich właśnie sztucznych testów. Dają one co prawda informacje o wykonaniu pojedynczej czynności, więc pozwalają dobrać najszybszy język do rozwiązania “mniejszego” problemu typu zapis do pliku czy też obliczenia numeryczne. (W Twoim przykładzie pozwoliłyby dobrać C do statystyk, a PERLa do tekstu i nie przeczę, że to jest ważne.)

Chodzi mi o to, że takie testy niestety, nie dają informacji o prawdziwym systemie informatycznym, w którym problemów występuje dużo, tworzonych i zarządzanych jest wiele obiektów (ja cały czas o OOP piszę), ważna jest łatwość i stabilność synchronizacji wątków, a poza tym równie wiele, co od obliczeń czy też IO, zależy od jego architektury.

Mam porównanie systemów napisanych w C++/COM oraz C#/NET, służących do wysyłania i odbierania danych sieciowych oraz archiwizowania ich w bazie, z jednoczesną obsługą wielu użytkowników i mających gwarantować, że wszystkie dane wysłane od i do użytkownika dotrą. O dziwo, ten drugi był 4 razy wydajniejszy. (Mimo, że zapewne wszystkie fory napisane w C++ były szybsze. :P)

Bezużyteczne są też benchmarki testujące problem dobrany pod konkretny język i próbujące porównać go z innym, też się czasem takie spotyka.

Poza tym wydajność aplikacji to jedno, a wydajność jej utworzenia i utrzymywania to drugie.

Bo nie mam już linka pod ręką, a nie chce mi się ponownie szukać. :wink: Co do ich intelektu - znam opowieści mrożące krew w żyłach z “wnętrza bestii”. Niektóre prawie zabawne!

To o czym mówisz ma się nijak do wydajności języka i/lub kompilatorów. To kwestia odpowiedniej metodologii i dojrzałości bibliotek. No i tak po prawdzie to główne problemy, które wynikają z nieprawidłowego doboru tychże, mają mniej wspólnego z wydajnością, a więcej ze stabilnością systemu jako całości. Ale to, znowu, nie benchmark języka, a programistów. Dochodzi do tego wiek bazy kodu, który (znowu!) nic nie mówi o języku. Widziałem fatalne rozwiązania oparte na COM+, które działałyby o niebo lepiej jako cienkie aplikacje Web (np. bugtracker wykorzystywany w MS). Ale rzeczywistość, kiedy powstawały, była inna. I nie ma to (znowu! !!

Owszem, daje informacje o tym, jak dany język przeszedł dany test, podobnie jak matura sprawdza umiejętność rozwiązywania matur.

Z tych wszystkich testów dowiemy się, czy warto napisać jakiś moduł systemu w języku A zamiast B, co w wielu sytuacjach jest ważne. Ale nie dowiemy się rzeczy ważniejszej - czy lepiej zrobić CRM dla dużego banku w technologii X czy Y. A to jest IMHO dużo istotniejsza informacja, którą można bezpośrednio zamienić np. w duże oszczędności podczas jego tworzenia. (Tylko z wiadomych przyczyn, nikt takich testów nie robi.)

Ale nawet nie tu jest problem. Newbie z takiego testu dowie się, że C++ to najwydajniejszy język na świecie i on musi się go uczyć i w nim pisać, żeby być najlepszy, a cała reszta

języków jest dla lamerów. Efekty tej “wydajności” widać na co dzień. :slight_smile: