Obracanie postaci w poziomie

Obracanie postaci w poziomie
XK
  • Rejestracja:ponad 3 lata
  • Ostatnio:prawie 2 lata
  • Postów:27
0

Chciałbym zrobić ,że gdy kliknę strzałkę w prawo (Porusza ona entity 'gladiator' w prawo) to wtedy postać obraca się w prawo (domyślnie jest obrócona w lewo)
Kod to:

Kopiuj
from ursina import*


def update():
    if held_keys['left arrow']:
        gladiator.x -= 1 * 0.1
    if held_keys['right arrow']:
        gladiator.x += 1 * 0.1
    if held_keys['down arrow']:
        gladiator.y -= 1 * 0.1
    if held_keys['up arrow']:
        gladiator.y += 1 * 0.1
    if held_keys['a']:
        gladiator2.x -= 1 * 0.1
    if held_keys['d']:
        gladiator2.x += 1 * 0.1
    if held_keys['s']:
        gladiator2.y -= 1 * 0.1
    if held_keys['w']:
        gladiator2.y += 1 * 0.1


app = Ursina()


window.borderless = False
window.title = 'Gladiator fight'
window.fullscreen = True
gladiator_texture = load_texture(r'assets\gladiator-left.gif')
gladiator = Entity(model='quad', texture=gladiator_texture, scale=(4, 4), position=(3, 0))
gladiator2_texture = load_texture(r'assets\gladiator - right.gif')
gladiator2 = Entity(model='quad', texture=gladiator2_texture, scale=(4, 4), position=(-3, 0))



app.run()
edytowany 1x, ostatnio: cerrato
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:37 minut
  • Postów:6643
1

Wiesz już jak obracać postać: Jak obracać postać w Ursinie gdy zmienia kierunek?

Widocznie nie rozumiesz jak działa obrót obiektu w przestrzeni 3D i nie potrafisz sobie wyobrazić pod jakim kątem trzeba obrócić obrazek, aby uzyskać zamierzony efekt.

Jeśli postać będzie domyślnie obrócona w prawo, to będzie zgodnie ze sztuką, bo tak wygląda 0 stopni w układzie współrzędnych.

Jeśli nie chce Ci się modyfikować grafiki postaci, to po prostu obrót wokół osi Z będzie się zawsze różnił o 180 stopni.
W lewo to 0 stopni. W prawo to 180 stopni. W górę to -90 stopni. W dół to 90 stopni.

Zrobiłbyś trochę eksperymentów z kodem, który Ci podałem w poprzednim wątku i byś doszedł do odpowiednich wartości.


🕹️⌨️🖥️🖱️🎮
edytowany 1x, ostatnio: Spine
XK
  • Rejestracja:ponad 3 lata
  • Ostatnio:prawie 2 lata
  • Postów:27
0

@Spine: Problem jest w tym ,że próbowałem; 180 to do góry nogami, 90, do góry itd. to gdy postać jest obrócona w lewo, ja chciałbym uzyskać efekt odbicia lustrzanego. Wiem że można dać rotation_y, ale wtedy obraca sie stopniowo i potem znika, a na y = 180 to znika gdy kliknę przycisk który odpowiada za ten ruch

edytowany 3x, ostatnio: XokoKnight
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:37 minut
  • Postów:6643
1

Nie napisałeś w jakim Świecie porusza się Twoja postać.
Z Twojego kodu wynika, że masz widok Top Down (jak np. w GTA 2) - bo postać porusza się strzałkami w górę i w dół.

na y = 180 to znika gdy kliknę przycisk który odpowiada za ten ruch

Czemu nie używasz Sprite zamiast Entity?
https://www.ursinaengine.org/entity_basics.html - nagłówek Texture.

Pytam, bo pewnie Ursina renderuje Twoje obrazki tylko na jednej stronie prostokąta. Dlatego po obrocie o 180 stopni wokół osi Y nic nie widać.
Być może Sprite ma dwustronny rendering i to by załatwiło sprawę.

W ostateczności możesz użyć skalowania.

Kopiuj
    if held_keys['left arrow']:
        gladiator.x -= 1 * 0.1
        gladiator.scale_x = 4
    if held_keys['right arrow']:
        gladiator.x += 1 * 0.1
        gladiator.scale_x = -4

Tylko nie jestem pewien, czy to będzie działać, bo tutaj pokazują tylko jeden sposób ustawiania skali: https://www.ursinaengine.org/entity_basics.html
Ale analogicznie do obrotu to powinno działać.


🕹️⌨️🖥️🖱️🎮
edytowany 2x, ostatnio: Spine
XK
  • Rejestracja:ponad 3 lata
  • Ostatnio:prawie 2 lata
  • Postów:27
0

@Spine: Niewiem jak użyć sprita, a teraz to mi kompletnie program świruje, świata nie zmieniałem

Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:37 minut
  • Postów:6643
0
XokoKnight napisał(a):

świata nie zmieniałem

Chodziło mi o to, że nie wiem co się robi w Twojej grze.
Np. jak chodzisz i skaczesz, to masz normalną platformówkę.
Ale jak chodzisz w dowolnym kierunku, to masz widok z góry.

XokoKnight napisał(a):

a teraz to mi kompletnie program świruje

Bez konkretów ciężko cokolwiek doradzić...
Kod źródłowy, screenshot, opis problemu.

XokoKnight napisał(a):

@Spine: Niewiem jak użyć sprita

Napisałem Ci już. Tutaj masz napisane jak użyć sprita:
https://www.ursinaengine.org/entity_basics.html - nagłówek Texture.


🕹️⌨️🖥️🖱️🎮
edytowany 3x, ostatnio: Spine
XK
  • Rejestracja:ponad 3 lata
  • Ostatnio:prawie 2 lata
  • Postów:27
0

@Spine: po prostu chodzę w dowolnym kierunku, gdy używam twojego kodu ze skalowaniem postać co chwilę znika i się pojawia. Kod źródłowy:

Kopiuj
from ursina import*


def update():
    if held_keys['left arrow']:
        gladiator.x -= 1 * 0.1
    if held_keys['right arrow']:
        gladiator.x += 1 * 0.1
    if held_keys['down arrow']:
        gladiator.y -= 1 * 0.1
    if held_keys['up arrow']:
        gladiator.y += 1 * 0.1
    if held_keys['a']:
        gladiator2.x -= 1 * 0.1
    if held_keys['d']:
        gladiator2.x += 1 * 0.1
    if held_keys['s']:
        gladiator2.y -= 1 * 0.1
    if held_keys['w']:
        gladiator2.y += 1 * 0.1
    if held_keys['left arrow']:
        gladiator.x -= 1 * 0.1
        gladiator.rotation_z = 0
    if held_keys['right arrow']:
        gladiator.x += 1 * 0.1
        gladiator.rotation_z = 90
    if held_keys['down arrow']:
        gladiator.y -= 1 * 0.1
        gladiator.rotation_z = 0
    if held_keys['left arrow']:
        gladiator.x -= 1 * 0.1
        gladiator.scale_x = 4
    if held_keys['right arrow']:
        gladiator.x += 1 * 0.1
        gladiator.scale_x = -4



app = Ursina()


window.borderless = False
window.title = 'Gladiator fight'
window.fullscreen = True
gladiator_texture = load_texture(r'assets\gladiator-left.gif')
gladiator = Entity(model='quad', texture=gladiator_texture, scale=(4, 4), position=(3, 0))
gladiator2_texture = load_texture(r'assets\gladiator - right.gif')
gladiator2 = Entity(model='quad', texture=gladiator2_texture, scale=(4, 4), position=(-3, 0))


app.run()
edytowany 1x, ostatnio: flowCRANE
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:37 minut
  • Postów:6643
0

Dopisz do twoich Entity, że są dwustronne.
Wtedy nawet rotacja wokół osi Y powinna działać.
Pewnie to skalowanie ma ten sam problem.

Kopiuj
gladiator_texture = load_texture(r'assets\gladiator-left.gif')
gladiator = Entity(model='quad', texture=gladiator_texture, scale=(4, 4), position=(3, 0), double_sided = True)
gladiator2_texture = load_texture(r'assets\gladiator - right.gif')
gladiator2 = Entity(model='quad', texture=gladiator2_texture, scale=(4, 4), position=(-3, 0), double_sided = True)

Tutaj znalazłem parametry Entity: https://www.ursinaengine.org/cheat_sheet.html


🕹️⌨️🖥️🖱️🎮
edytowany 2x, ostatnio: Spine
XK
  • Rejestracja:ponad 3 lata
  • Ostatnio:prawie 2 lata
  • Postów:27
0

@Spine: Popróbuje z tym, a jest jakaś opcja żeby po prostu obrócić w poziomie? Bo ja ogólnie jestem dosyć nowy w programowaniu, a zwłaszcza w ursinie
Obracanie w osi y nic mi nie dało żeby uzyskać ten efekt

Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:37 minut
  • Postów:6643
0
XokoKnight napisał(a):

@Spine: Popróbuje z tym, a jest jakaś opcja żeby po prostu obrócić w poziomie?
...
Obracanie w osi y nic mi nie dało żeby uzyskać ten efekt

Znalazłem też, że Entity ma metodę flip_faces().
Tylko jeśli to robi to co myślę, to będzie trzeba jakoś zabezpieczyć, żeby wykonywała się tylko raz przy zmianie kierunku.

Mniejsza z tym. Zauważyłem, że nie wprowadzałeś moich poprawek, tylko doklejałeś kolejne linijki obsługi tych samych klawiszy...
Miałeś np. zamienić kod pod if held_keys['left arrow']: na to co napisałem, a nie doklejać pod spodem.
Tak więc jak ktoś przy Twoim obecnym kodzie wciśnie strzałkę w lewo, to wykona się:

Kopiuj
gladiator.x -= 1 * 0.1
gladiator.x -= 1 * 0.1
gladiator.rotation_z = 0
gladiator.x -= 1 * 0.1
gladiator.scale_x = 4

Usuń nadmiarowe obsługi klawiszy. Każdy klawisz obsługuj raz. Obracanie sprite wykonuj ALBO przez rotację, ALBO przez skalowanie. Teraz masz obie rzeczy na raz. Jak np. idziesz w prawo, to postać "obraca się" dwa razy, więc to wygląda jakby obrót nie nastąpił.

XokoKnight napisał(a):

Bo ja ogólnie jestem dosyć nowy w programowaniu, a zwłaszcza w ursinie

Jeśli nikt Cię nie zmusza do używania tego silnika, to uciekaj.
Ciężko w ogóle coś wygooglować na ten temat.
Wygląda to na jakąś niszową technologię, która nie zdobyła i prawdopodobnie nie zdobędzie dużej społeczności.

Jakbyś robił grę w Unity i wpisałbyś w google swoje pytania o obracanie, to znalazłbyś bardzo dużo tematów na forach oraz filmiki pokazujące jak to zrobić.

Jeśli chcesz zostać przy Pythonie i robisz grę 2D, to znacznie łatwiej będzie Ci osiągać rezultaty w pygame, albo nawet pobaw się pygame zero.

https://www.pygame.org/
https://pygame-zero.readthedocs.io/en/stable/introduction.html

pygame ma wieloletnią historię. Przez co jakaś tam społeczność powstała i jest pełno materiałów dla początkujących.
Ursina ma raptem 4 lata.


🕹️⌨️🖥️🖱️🎮
edytowany 5x, ostatnio: Spine
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)