Symulator EU07 (i nie tylko) > Poradniki

 [INNE] Ekran komputera pokładowego w pythonie

<< < (6/7) > >>

jakubg1:
Niestety teraz kończy się to jeszcze gorzej - wysypuje symulator.
Problem został dawno rozwiązany. Nikt nie musi już podawać rozwiązania.

tmj:

--- Cytat: Stele w 20 Grudnia 2016, 21:13:09 ---Mierniki kołowe:
Czyli coś w stylu siłomierza traxxa. Figury ograniczonej krzywymi nie możemy narysować o ile mi wiadomo.

--- Koniec cytatu ---
Mozliwym rozwiazaniem jest tutaj zwykle oszustwo: krzywa modelujesz jako osobny pasek geometrii, nalozony "na" ekran (czyli umieszczony pare mm przed nim zeby ograniczyc z-fighting) zawiniety w wymagany ksztalt i z przypisana ta sama tekstura, ktorej uzywa ekran. Rezerwujesz dla niego waski pas np na dole tekstury, i w kodzie pythona rysujesz tam odpowiedniej wielkosci wypelniony prostokat z dowolnymi bajerami, odpowiadajacy stopniowi wypelnienia krzywej... a z punktu widzenia uzytkownika wyglada to na rosnaca krzywa na ekranie.

Stele:
No ale tu już chyba lepiej dawać maskę w pythonie, niż wracać do ekranów pseudocyfrowych, na dziurach i analogowych suwaczkach.

tmj:
To juz imo kwestia gustu, lenistwa (w sensie, dla mnie wymodelowanie paska jest latwiejsze/szybsze niz zabawy w dodatkowe oskryptowanie) jakosci efektu koncowego i wymaganych zasobow. Przy odrebnym elemencie nie ma na przyklad wiekszych problemow z rysowaniem takich rzeczy jak wybrana wartosc tempomatu, poruszajaca sie plynnie 'co do piksela' i dostosowana do orientacji krzywej, jaka by ona nie byla; nie trzeba tu sie bawic w zadne trygonometrie, obracanie itp. Odpada tez zuzycie pamieci na maske, a i operacje graficzne na waskim prostokatnym elemencie powinny byc szybsze niz aplikacja maski, bo mamy do czynienia z duzo mniejsza powierzchnia.

Balaclava:
Nieco usprawniona wersja kodu odpowiedzialnego za zapis przebiegu do pliku.
1. Doklejamy poniższy kod na koniec metody __init__

--- Kod: ---# przeniesienie ścieżki do funkcji zapisującej
self.lookup_path = lookup_path
# zapisywanie ostatniej sekundy od liczenia przebiegu
self.last_time_update = 0
# losowanie przebiegustartowego
self.kilometry = PS+(random()*PL)+(1+self.rok-RokProd)*PR+self.dzis*PD
# ostatni zapisany przebieg
self.kilometry_z = 0
try:
with open(lookup_path + "tacho.txt", "r") as tacho_file:
tempkm = tacho_file.read()
if tempkm == "":
    raise IOError
except IOError:
tempkm = randint(1, 499000)
finally:
self.kilometry = float(tempkm)
self.kilometry_z = self.kilometry
with open(lookup_path + "tacho.txt", "w") as tacho_file:
tacho_file.write(str(tempkm))

--- Koniec kodu ---
2. Na końcu funkcji render dopisujemy:

--- Kod: ---#zapis stanu licznika do pliku
if self.kilometry>(self.kilometry_z + (0.1+0.005*speed)):
    with open(self.lookup_path + "tacho.txt", 'w') as tacho_file:
tacho_file.write(str(self.kilometry))
self.kilometry_z = self.kilometry

--- Koniec kodu ---

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej
Powered by Advanced Topic Prefix Pro
Powered by SMFPacks Likes Pro Mod