Panel Logowania

Python w BGE - podstawy

napisał : gumen
20
września
2012
Podstawy python'a w bge. Co, jak, gdzie i dlaczego używać skryptów zamiast kostek logiki.
tagi : python bge tutorial programowanie

1. Wprowadzenie

Programowanie od zawsze było nierozłączną częścią tworzenia gier komputerowych. Jednak blender daje nam możliwość stworzenia interaktywnego środowiska bez kodowania. Czy to oznacza, że pisanie skryptów nie jest nam dłużej potrzebne? Oczywiście, że nie. Kostki logiki nie dają nam takiej kontroli jak kilka prostych linijek kodu. Wystarczy spojrzeć na ukończone projekty w bge, w których ograniczono programowanie do minimum. Mnogość i zawiłość kostek logiki przytłacza. Dlatego najwyższa pora ograniczyć ich ilość do minimum, na rzecz paru prostych skryptów.

W tutorialu nie nauczymy się programowania. Jest to bardzo obszerny temat, który każdy powinien opanować i doskonalić na własną rękę. Objaśnię jak korzystać, ze skryptów, pobierać obiekty do kodu, manipulować nimi, korzystać z parametrów obiektu oraz poruszać się w kostkach logiki z poziomu skryptu. Dodatkowo zapoznamy się z dokumentacją, która powinna być zawsze pod ręką. Dla tych, którzy nigdy nie programowali, albo programowali, ale w innych językach (to już bardzo dużo) mam kilka przydatnych linków.

http://pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie
http://pl.python.org/kursy,jezyka.html
http://www.youtube.com/watch?v=iGQv7bR6zCQ&feature=share&list=ULiGQv7bR6zCQ

Nauka programowania może odbywać się na dowolnym języku. Zazwyczaj w szkołach rozpoczyna się od Pascal'a i potem przechodzi do C++. Języków programowania jest mnóstwo, a różnią się przede wszystkim składnią. Programista, który opanował jeden język programowania na wysokim poziomie, z łatwością przeżuci się na inny. Najważniejsze są podstawy (typy zmiennych, pętle, warunki, klasy, funkcje, procedury, obiekty, klasy itd.) i czytanie dokumentacji.

Wiem, że kogoś kto nigdy nie programował, może to wszystko bardzo zniechęcać. Przecież chcemy tylko napisać prosty skrypt do swojej gry. Ale nie ma się czym przejmować. Od czegoś trzeba zacząć, a ten tutorial jest właśnie dla początkujących.

2. Przygotowanie

Stworzyłem 4 pliki blend (2.63a). Trzy z nich zawierają prostą scenę z gotowym kodem, a czwarty wykorzystamy na początku każdej części tutka. Przyjrzymy się teraz tej czwartej scenie python_basic_start.blend. UWAGA OTWORZENIE PLIKU W STARSZEJ WERSJI BLENDERA MOŻE POWODOWAĆ WYŚWIETLANIE BŁĘDÓW W KONSOLI NIE ZWIĄZANYCH Z SKRYPTEM.


http://www.pasteall.org/blend/16447

Mamy cztery obiekty: kamerę, dwa światła i śmigło. W tej chwili śmigło posiada trzy kostki logiki. Pierwsza to sensor typu Keyboard reagujący na wciśnięcie spacji. Jest połączony z kontrolerem And, który uruchamia actuator Motion. W efekcie za każdym razem gdy sensor Keyboard wysyła prawdę (wciśnięta spacja) obracamy śmigło o 33 stopnie względem lokalnej osi Z. Każdy skrypt zaczniemy właśnie od takiego ustawienia, a naszym celem będzie całkowite zastąpienie wszystkich kostek logiki (pozostawiająca tylko dwie niezbędne do uruchomienia skryptu) tak aby uzyskać lepszy efekt obracanego śmigła.

Potrzebujemy jeszcze dokumentacje. Znajdziemy ją na stronie blendera. Wchodzimy w zakładkę Development>Documentation>PythonAPI (http://www.blender.org/documentation/blender_python_api_2_63_17/).

3. Pierwszy skrypt

Zaczynamy w pliku python_basic_start.blend. W oknie Text Editor usuwamy istniejący plik tekstowy. Klikamy na X, akceptujemy usunięcie. Klikamy na NEW. Wpisujemy nazwę i rozszerzenie pliku skrypt.py. Teraz zmieniamy typ kontrolera z AND na Python. W pustym polu wybieramy nasz skrypt. Jak widać w kontrolerze pozostała nazwa And, nie ma to większego znaczenie, możemy tak zostawić.

Teraz przechodzimy do skryptu i wpisujemy:

from bge import logic

cont = logic.getCurrentController()
rotation = cont.actuators['Rotation']

cont.activate(rotation)

Teraz możemy przetestować skrypt. Uruchamiamy grę i wciskamy spację. Jak widać skrypt nie działa :) Dlatego najwyższa pora przedstawić kolejnego przyjaciela programisty, a mianowicie konsolę. Uruchamiamy ją wchodząc w Help na górnym pasku Blendera i wybieramy Toggle System Console. Pojawiło się nowe okno. Jest to konsola, w której wyświetlane są błędy oraz to co sami w niej wypiszemy.

Na razie nie rozumiemy tego błędu więc zostawmy konsolę w spokoju i przejdźmy do skryptu. Pierwsza linia skryptu odpowiedzialna jest za importowanie potrzebnych modułów, z których będziemy potem korzystać. W tym wypadku będziemy korzystać z modułu logic znajdującego się w bge. Możemy znaleźć to w dokumentacji na stronie głównej (link który podałem wcześniej). Jak widać w bge mamy 6 modułów: types, logic, render, texture, events, constrains. Często widuję jak ktoś wpisuje:

import bge

W ten sposób importujemy wszystkie 6 modułów. My nie potrzebujemy wszystkich na raz. Nasza magiczna formuła jest czytelniejsza i prostsza do przetworzenia dla komputera.

Następnie mamy nową zmienną cont. Używając modułu logic wpisujemy do niej kontroler, z którego uruchamiamy skrypt. Czyli w zmiennej cont mamy kontroler o nazwie And (jeśli nie zmienialiście), w którym uruchamiamy skrypt. Jest to bardzo często stosowane, ponieważ taki kontroler posiada bardzo dużo informacji. Można za jego pomocą dostać się do wszystkich kostek logiki, które są do niego podłączone oraz do obiektu, który jest właścicielem tych kostek logiki. Teraz użyjemy go aby dostać się do actuatora typu Motion, który obraca śmigłem. Właśnie to dzieje się w następnej linii, gdzie do zmiennej rotation wrzucamy actuator. Robimy to wykorzystując pobrany kontroler, po kropce wpisujemy actuators (jest to lista wszystkich dostępnych actuatorów) i w nawiasach kwadratowych jego nazwę lub numer. Jako, że mamy tylko jeden actuator, możemy zamiast nazwy wpisać:

rotation = cont.actuators[0]

(w programowaniu, zawsze liczymy od 0). Teraz po wprowadzeniu tej zmiany sprawdźmy czy skrypt działa. Uruchamiamy grę i wciskamy spację. Działa, jak widać trochę inaczej niż wcześniej. Śmigło nie przestaje się kręcić, ale to nic, naprawimy to potem. Teraz cofniemy zmianę (wpisujemy 'Rotation' zamiast 0), uruchamiamy grę, wciskamy spację, nic się nie dzieje, wychodzimy z gry i otwieramy konsolę. W konsoli mamy kilka razy pod rząd informacje o błędzie. Przyjrzyjmy się składni tej informacji o błędzie. W pierwszej linii mówi nam w jakim obiekcie i którym kontrolerze wystąpił błąd. Następnie możemy znaleźć informacje o nazwie pliku, w którym jest błąd i linii. Na koniec treść błędu: KeyError: 'requested item "Rotation" does not exist'. No i wszystko jasne. W czwartej linii tworzymy zmienną rotation, do której wrzucamy actuator. Robimy to wpisując jego nazwę, a jego nazwa to Motion, a nie Rotation. Możemy naprawić błąd wpisując w skrypcie Motion zamiast Rotation, albo w kostkach logiki zmienić nazwę z Motion na Rotation. Ostatecznie możemy, wrócić do zera, ale jak mamy kilka actuatorów, to cyfry nie są zbyt czytelne, lepiej posługiwać się nazwami.

Na samym końcu skryptu posługujemy się metodą activate znajdującą się w każdym kontrolerze. W nawiasach podajemy argument, którym jest, pobrany przez nas wcześniej, actuator. Uruchamiamy w ten sposób wybrany actuator. Na tym kończymy ten pierwszy skrypt. Gotowa scena: http://www.pasteall.org/blend/16448

 

4. Udoskonalamy skrypt

Zaczynamy w pliku python_basic_start.blend. Tym razem pozbędziemy się actuatora i będziemy obracać śmigłem z poziomu skryptu.

Tak jak wcześniej usuwamy plik tekstowy i tworzymy nowy o nazwie skrypt2.py. Usuwamy actuator, zmieniamy kontroler z AND na Python. W sensorze zaznaczamy opcję TRUE level triggering. Teraz w kontrolerze typu Python zmieniamy typ wykonywania skryptu na Module i ręcznie wpisujemy skrypt2.main.

Ta opcja pozwala na uruchomienie funkcji znajdującej się w skrypcie. Podajemy nazwę skryptu, kropka i nazwa funkcji. W ten sposób możemy mieć np.: jeden skrypt save_load.py, a w nim dwie funkcje save_game i load_game. Będziemy wywoływać jedną z funkcji w zależności od potrzeb. W tym przypadku mamy tylko jedną funkcję, ale zachęcam do korzystania z tej metody bo ma ona jeszcze jeden bonus (ale o tym za chwilę). Teraz wpisujemy kod do naszego skryptu:

from math import radians

def main(cont):
    own = cont.owner

    own.applyRotation((0,0,radians(33)), True)
    print('obracamy')

Możemy uruchomić grę i widzimy, że wszystko działa i tym razem śmigło zatrzymuje się jak puszczamy spację. Jak widać tym razem nie importujemy żadnego modułu bge. Nie będą potrzebne, mimo iż też posłużymy się kontrolerem. Importujemy z modułu math funkcję radians. Bierze się to ze standardowej biblioteki pythona. Można znaleźć o tym informacje w dokumentacji http://docs.python.org/library/math.html#module-math. Użyjemy funkcji radians do zamiany stopni na radiany.

Dalej definiujemy funkcję main, która jest wywoływana w kontrolerze. W  nawiasach podajemy nazwę argumentu, gdzie w tym przypadku (wspomniany bonus) w pierwszym argumencie dostajemy bge.logic.getCurrentController(). Czyli automatycznie tworzymy zmienną cont. Wykorzystujemy ją, aby przypisać zmiennej own obiekt będący właścicielem skryptu, czyli nasze śmigło. Podsumowując, w zmiennej own mamy obiekt airscrew (śmigło) i możemy teraz nim manipulować.

Następnie, wykorzystując pobrany obiekt, modyfikujemy jego rotację. Posługujemy się metodą applyRotation. W tym miejscu odsyłam do dokumentacji: http://www.blender.org/documentation/blender_python_api_2_63_17/bge.types.html?highlight=applyrotation#bge.types.KX_GameObject.applyRotation
Mamy tam napisane, że applyRotation(rotation, local=False)co oznacza, że w pierwszym argumencie podajemy rotację, a w drugim czy ma być w osi lokalnej czy globalnej. Trochę niżej widać, że rotation jest tylu 3D Vector oraz co oznacza local. W praktyce, wartość obrotu podajemy w nawiasach w kolejności (x, y, z). Wpisujemy (0, 0,radians(33)), co znaczy, że obracamy tylko względem osi Z o 33 stopnie, które zamieniamy na radiany (tak poprawnie podaje się kąt obrotu). Potem mamy True co mówi nam, że obracamy względem lokalnej osi Z, co w tym przypadku nie ma znaczeni bo lokalna oś Z obiektu pokrywa się z globalną. Na samym końcu skryptu mamy polecenie print(). Wypisuje ono tekst, albo zmienne do konsoli. W tym wypadku tekst obracamy zostanie wyświetlony tyle razy ile razy zostanie wykonany skrypt, który uruchamiamy spacją. Możemy w ten sposób sprawdzać wartości zmiennych podczas tworzenia bardziej skomplikowanych skryptów.
Gotowa scena: http://www.pasteall.org/blend/16449

 

5. Bardziej złożony skrypt.

Zaczynamy jak zwykle od pliku python_basic_stary.py. Usuwamy plik tekstowy i tworzymy nowy o nazwie skrypt3.py. Usuwamy actuator. Zmieniamy typ kontrolera na Python, wybieramy Module i wpisujemy skrypt3.main. Zmieniamy typ sensora na Always i zaznaczamy TREU level triggering. Dodajemy nowy parametr do obiektu o nazwie rotation typu float. Będziemy używać tego parametru w skrypcie. Zmieniając jego wartość ustawimy przyspieszenie śmigła.

Teraz wpisujemy kod do skryptu:

from bge import logic, events
from math import radians

def main(cont):
    own = cont.owner
    keyboard = logic.keyboard

    status = (logic.KX_SENSOR_INACTIVE, logic.KX_INPUT_ACTIVE)
    rotSpeed = 0.3
    maxSpeed = 74

    if keyboard.events[events.SPACEKEY] == status[1] and own['rotation'] < maxSpeed:
        own['rotation'] += rotSpeed
    elif own['rotation'] > 0:
        own['rotation'] -= rotSpeed
    else:
        own['rotation'] = 0

    own.applyRotation((0,0,radians(own['rotation'])),

Odpalamy grę i wciskamy spację. Jak widać teraz wszystko działa znacznie lepiej. Śmigło przyspiesza jednostajnie aż osiągnie maksymalną prędkość i zwalnia jak puścimy spację. Teraz przyjrzyjmy się skryptowi. Tak jak w pierwszym skrypcie importujemy logic, ale nie tylko. Tym razem będziemy też potrzebować events. W tym module znajdują się wszystkie klawisze. Dodatkowo importujemy funkcję radians tak jak ostatnio.

Teraz przechodzimy do funkcji main i tak jak ostatnio tworzymy zmienną own. Następnie mamy zmienną keyboard, którą będziemy sprawdzać jaki status ma wciskany klawisz. Lista status zawiera dwa z czterech możliwych statusów. Wszystkie cztery można znaleźć oczywiście w bge.logic czyli wchodzimy w dokumentację wybieramy Game Logic(bge.logic) i gdzieś na dole mamy Input Status (http://www.blender.org/documentation/blender_python_api_2_63_17/bge.logic.html#input-status). Teraz dwie zmienne, pierwszą będziemy zwiększać wartość parametru rotation, a druga to maksymalna wartość tego parametru.

Następnie mamy warunek. Wykorzystujemy zmienną keyboard z wybranym klawiszem aby sprawdzić status tego klawisza. Jeśli będzie taki sam jak drugi status w liście (liczymy od 0, 1 to drugi status) to warunek będzie spełniony. Można w tym miejscu zmienić status na pierwszy z listy, wpisując 0. Wtedy śmigło samo będzie się kręciło, a naciskając spację będziemy spowalniać jego ruch. W ty samym warunku sprawdzamy czy parametr rotation nie przekracza granicy. Jeśli wszystko jest ok to dodajemy wartość do parametru, jeśli nie to odejmujemy, ale pod warunkiem, że wartość parametru nie spadła poniżej zera. Jeżeli nie naciskamy spacji i wartość parametru rotation jest mniejsza od zera to ustawiamy ten parametr na 0. W ten sposób zatrzymujemy śmigło. Ostatnia linijka jest znana.

Możemy dopisać  na końcu:

    print(own['rotation'])

W ten sposób będziemy wypisywać w konsoli wartość parametru co pozwoli nam obserwować zmiany.Albo możemy wcisnąć przycisk Print debug information..., który znajduje się obok parametru.

Wtedy musimy dodatkowo zaznaczyć w opcjach renderowania w zakładce Display - Debug Properties. I teraz jak uruchomimy grę to zobaczymy informację o wartości parametru w oknie gry.

Gotowa scena: http://www.pasteall.org/blend/16451

 

6. Na koniec...

...chcę zachęcić do studiowania napisanych już skryptów. To jedna z najlepszych metod nauki. Jeśli uda wam się w pełni zrozumieć inny kod (co, jak, gdzie i dlaczego) to zrobicie duży krok na przód. Na tej stronie http://www.nilunder.com/tutorials znajdziecie tutoriale, gdzie problemy rozwiązywane są tylko skryptami. Autor tutoriali (Goran) pisze skrypty na bardzo wysokim poziomie. Zrozumienie tych skryptów czasem jest trudne, biorąc pod uwagę fakt, że z blendera korzystają (w pierwszej kolejności) artyści nie programiści. 

To wszystko, dzięki za uwagę.

30 komentarzy
Michalek napisał :
godz. 20:05, 20 września 2012
No wreszcie sie doczekalem!! jeszcze nawet nie przeczytalem ale musze wyrazic jakos swa radosc :) Super!!!
Karricjusz napisał :
godz. 16:39, 16 października 2012
Muszę przyznać, że z tego tutoriala nic nie zrozumiałem, jak go pierwszy raz czytałem :/ Dopiero teraz, jak na YouTube znalazłem jakiś angielski videotutorial, to mniej więcej widzę, o co tu chodzi. Poza tym, takie ciągłe pobieranie plików nie jest wygodne, chciałbym po prostu czegoś się nauczyć, a nie pobierać kolejne pliki.. A, no i jeszcze w Blenderze jest opcja wzorców skryptów, to bardzo miłe, choć nie wiem, czy we wcześniejszych wersjach była, czy nie :3
deny napisał :
godz. 09:01, 18 października 2012
Dzieki za tutka. Oby więcej takich. Miałem tylko jedną małą zagwozdkę. Chcąc pójść na skróty skopiowałem skrypt pythona ze strony i śmigło się nie kręciło. Chodzi o to że python jest wrażliwy na pewne niewidoczne znaki jak spacja, tabulacja i enter. Jednak idąc krok po kroku doszedłem do miejsca gdzie tkwił błąd.
dehneo napisał :
godz. 01:42, 18 grudnia 2012
Dzięki za tutek, osobiście udało mi się wszystko zrozumieć ale faktycznie wymagało to przeczytania niektórych zdań i akapitów kilka razy. Dodam, że macie błąd w ostatnim skrypcie, tym złożonym - po przecinku brakuje do dopisania True) - wszystko musi wyglądać jak tam wyżej :D

Przydałoby się jakieś rozwinięcie bo jednak trochę mało zostało powiedziane (nie czuję się gotowy by rzucić się na głeboką wodę dokumentacji), a Python to temat rzeka i warto poświęcić mu kilka tutków :)
maniek napisał :
godz. 08:33, 18 grudnia 2012
W przygotowaniu jest przewodnik po pythonie... lecz niestety nie powiem Ci kiedy dokładnie wyjdzie
CriissD napisał :
godz. 17:29, 20 grudnia 2012
nie wiem o co chodzi ale nie dzialaja mi moduly wywala mi blad :
File "\Text", line 1, in &lt;module&gt;
ImportError: No module named bge

no i nie wiem czy te api to trzeba wprowadzic do blendera
maniek napisał :
godz. 17:54, 20 grudnia 2012
moduł bge nie działa po uruchomieniu skryptu za pomocą skryptu [Alt]+[P].. bge tylko działa w momencie uruchomienia gry
CriissD napisał :
godz. 19:13, 20 grudnia 2012
czyli co trzba zrobic zeby owy modul dzialal mi? i co do tej dokumentacji api to po pobraniu to co trzeba z nia zrobic?
maniek napisał :
godz. 20:01, 20 grudnia 2012
zaznacz jakiś obiekt, następnie dodaj jakiś sensor np.: Keyboard zdefiniuj klawisz np.: spacja
daj controller python i wybierz w nim swój skrypt.. Połącz Sensor z controllerem.. Uruchom grę i wciśnij spację.. skrypt powinien się wykonać...
CriissD napisał :
godz. 20:05, 20 grudnia 2012
wlasnie o to chodzi ze to nie dziala dlatego pytam sie co jest grane? sprawdze jeszcze na nowszej wersji bo mam 2.63 a zobacze na 2.65 a czy tej dokumentacji nie musze gdzies wklejac itd?
CriissD napisał :
godz. 20:21, 20 grudnia 2012
http://imageshack.us/photo/my-images/38/scriptlq.png/ moze to pomoze albo zaczne uczyc sie na innym silniku jesli nie znajde odpowiedzi na to co jest grane
maniek napisał :
godz. 20:35, 20 grudnia 2012
No ale ty robisz "Run Script".. to nie to.. Trzeba uruchomić BGE.. przejdź myszką nad okno 3d View i wciśnij klawisz P.. Gra się uruchomi.. Dopiero wtedy wciskasz spację i dopiero wtedy skrypt się uruchomi
CriissD napisał :
godz. 22:09, 20 grudnia 2012
czyli skrypt sam sie uruchamia i jest synchonizowany / przetwazany na bierzaco??
maniek napisał :
godz. 22:21, 20 grudnia 2012
skrypt jest wywoływany w momencie aktywacji sensora czyli w twoim przypadku podczas wciśnięcia klawisza Spacji..
Window -&gt; Toggle System Console.. tu pojawią Ci się błędy jeśli coś napiszesz źle
CriissD napisał :
godz. 15:00, 21 grudnia 2012
teraz juz zaczynam lapac o co chodzi... taka drobna rada. jezeli chcesz aby twoj tutek byl bardziej zrozumialy to zrob filmik to jest lepsze od tekstu i kilku obrazkow (szczegolnie jak ktos zaczyna przygode np z programowaniem)
maniek napisał :
godz. 15:22, 21 grudnia 2012
no niestety w tym akurat temacie nasze zdania się rozbiegają ;)
CriissD napisał :
godz. 16:37, 21 grudnia 2012
czyli myslisz ze tutek w pdf'ie bylby lepszy? jesl;i chodzi o kwestie skryptow to oczywiscie ale cala reszte lepiej pokazac
maniek napisał :
godz. 17:43, 21 grudnia 2012
nie chodzi o pdf.. z osobisty i nie tylko względów wole tekstowy tutorial z obrazkami ;) i nie przekonasz mnie do innej formy wyświetlania artykułów
CriissD napisał :
godz. 17:49, 21 grudnia 2012
no coz nie bede nalegal... w sumie taka forma tez nie jest zla bo wlasnie zaczynam rozumiec ste skrypty jezcze nie umiem do konca opisac tego zlozonego ale... powoli do przodu za co wielkie dzieki tobie ;D moze wybuduje pomnik na twoja czesc :)
maniek napisał :
godz. 18:09, 21 grudnia 2012
ok.. czekam na info o pomniku ;)... tymczasem zaczynamy przewodnik po pythonie ;)
Speedy napisał :
godz. 00:38, 9 stycznia 2013
Dzięki wielkie, widziałem ten tutorial lecz nie potrafię z nim ruszyć względem dodania kolejnych przycisków :/ mógłbyś podpowiedzieć jak ma wyglądać względem kostek logiki oraz skrypt aby zaimplementować np obracanie w drugą stronę drugim przyciskiem?

Wielkie dzięki za pomoc!
Misiek1979 napisał :
godz. 22:53, 25 stycznia 2013
Witam, jestem początkujący w Pythonie i chciałem przerobić tego tutoriala (jak zaczynać to od podstaw) i mam taki mały (chyba) problem, za kazdym razem wyskakuje mi błąd. Mam Blendera 2.65 , no chyba że inaczej wyglądają komendy do pythona dla tej wersji. Prosze o pomoc bo nic niemoge zrobić.
maniek napisał :
godz. 13:21, 27 stycznia 2013
A podałbyś jaki to błąd?? czy mamy się domyślić....?? daj od razu swój pliczek..
Misiek1979 napisał :
godz. 20:55, 29 stycznia 2013
bpy.ops.text.run_script()
Pthon script fail, look in the console for now...

Kurde niewiem co to jest, gdzie, co i jak mam to poprawić.
dar810 napisał :
godz. 13:31, 7 listopada 2014
Ta strona http://www.nilunder.com/tutorials nie działa gdzie można znaleźć więcej tutoriali ?
Ender napisał :
godz. 12:00, 30 grudnia 2017
Witam
Mam pytanko. Zgłębiam aktualnie Pythona w wersji 3.4, bo to ostatnia działająca z PyGame. Działam na EdUbuntu 64 bit, IDLE 3.4. Jaka wersja Blendera będzie najlepiej/najstabilniej działać z tą wersją Pythona, no i BGE? Sorki za wykopaliska. :)
maniek napisał :
godz. 14:04, 30 grudnia 2017
A jaka wersja tego EdUbuntu?? i w sumie czemu EdUbuntu??
Ender napisał :
godz. 14:11, 30 grudnia 2017
Bawiłem się cały czas Mintem, a teraz sobie spróbowałem EdUbuntu (ostatnia jaka jest 14.04), ogólnie mozna przyjać, że Ubuntu/Mint. Dlaczego? No, bo ... i nazwijmy to dawnym zboczeniem zawodowym :) Dzieci mam i chciałem, je zainteresować Linuksem.
maniek napisał :
godz. 21:39, 30 grudnia 2017
E no to super.. ja też swoją rodzinę męczyłem linux'em.. Doszło do tego jak kiedyś zainstalowałem Windowsa to siostra z przerażeniem pyta mnie : "A gdzie tu jest Totem??" (Totem - standardowy odtwarzacz filmów ) w BGE..

Jeśli chcesz być na bieżąco z najnowszymi wersjami Pythona czy Blendera aktualizuj też system.. Ubuntu jest teraz w wesji 17.10, której nie polecam, ale 17.04 lub 16.10 mógłbyś sobie zainstalować.. A obecnie opuściłem Ubuntu-podobne dystrybucje i przeszedłem na Manjaro ;)
Ender napisał :
godz. 22:24, 30 grudnia 2017
No dobra napaliłem się ponownie na BGE. Muszę poszukać w necie jak projekt 2D przerobić w 3d low poly, do tego być może tekstury komiksowe/kreskówkowe. Najpierw opanuję Pythona, na razie idzie w miarę, ale urlop się zaraz skończy.
Dodaj komentarz
Aby dodać komentarz do newsa, musisz być zalogowany w Serwisie.. Zaloguj