rotace čtyřúhelníků   zodpovězená otázka

VB.NET

Ahoj přátelé,

dělám jednoduchou hru pro nevidomé, starého známého Sokobana.

Pochopitelně zcela vynechávám grafiku, ale geometrie mě nemine.

Chci do hry přidat další objekty jako třeba různý nábytek, všechny ve tvaru čtverce nebo obdélníku.

To přináší nutnost vyřešit jejich natáčení. Nechám je hráče natáčet jenom po 45ti stupních. Ale jak provést přímo tu rotaci?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Objekt Graphics má metodu RotateTransform(ByVal Single), což je transformace v podobě otočení pod libovolným úhlem. Transformace je nějaká modifikace grafiky, kterou lze kdykoliv zrušit. Problém je ten, že transformace se dá aplikovat pouze na celý Graphics, takže se vám otočí všechno co v něm máte nakresleno. Ve WPF by to byla hračka udělat, tam se dá transformace aplikovat na konkrétní objekty (obdélník).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To není pravda, RotateTransform se neaplikuje na celý Graphics, jak tvrdíte.

Můžete vykreslit 100 obrázků normálně, pak nastavíte RotateTransform a co vykreslíte po ní bude otočené. Pak zavoláte ResetTransform a od té chvíle se bude zase kreslit normálně.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Vida, to jsem si nevšiml, protože jsem nikdy nepotřeboval kreslit do scény více než jeden objekt... V tom případě má L. Vámoš značně ulehčenou práci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Existují 2 způsoby transformací objektů - globální a lokální. Globální jsou uplatněny na kompletní obsah objektu Graphics, lokální pouze na konkrétní kreslený objekt. Osobně doporučuji převést Váš čtyřúhlelník na objekt GraphicsPath, na které lze uplatnit konkrétní lokální transformaci aniž byste ovlivnil transformaci globální. Ve vašem případě tedy takto:

Dim myRectangle as new Rectangle(10,10,100,50)  ` nový obdélník
Dim myPath as new GraphicsPath `nová cesta
myPath.AddRectangle(myRectangle) `obdélník vložím do cesty
myPath.RotateAt(BodOtoceni, UhelVeStupnich) `otočím cestu okolo konkrétního bodu

Pokud použijete metodu Rotate místo RotateAt dojde k otočení objektu okolo souřadného počátku což může mít za následek "zmizení objektu" z dosahu obrazovky, u metody RotateAt můžete určit, že se bude cesta alias obdélník oráčet okolo např. dolního levého rohu jak je zvykem. Velice hezké články o GDI+ naleznete na www.bobpowell.net.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback