Diskuze: Pohyb s objektem
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Já bych udělal každý objekt jako samovykreslovací komponentku - Drawable
Component. A v Update si hlídal, zda já.Intersects(rectangle myši - cca
6x6). Takže "já" bude buď nově vytvořený Rectangle z vastnosti Position,
nebo si pozici objektu můžeš zaznamenávat rovnou v Rectangle - v případě,
že je každý objekt jinak veliký bych ukládal pozici v Rectangle i za cenu,
že se mu hůře mění pozice - při kliknutí a překrývání s myší budeš
muset nesutále vytvářet nové Rectangly - ovšem s X a Y v smoatatných
proměnných by bylo asi mnohem více práce...
Takže abych to shrnul - každý
objekt udělej jako Drawable Component. Předávej si jeden SpriteBatch a v
komponentkách již nemusíš volat Begin a End. A v update hlídej kolize s
ostatnímy obekty včetně myši, atp...
PS.: Intersects je skutečně metoda Rectangle...
Domy jako komponenty prosím nedělej, je to hloupost a už jsem to Matesaxovi několikrát říkal. Pokud je každý dům stejně velký, mohl by sis to velmi zjednodušit 2D polem místo toho listu. Pokud ne, je list nutný. Tvůj kód se mi moc nelíbí, proč si prostě neuložíš aktuálně držený dům do proměnné? Pokud dům držet nebudeš, bude v proměnné hodnota null. Vůbec nechápu všechny ty cykly a asi ani nechci chápat.
Souhlasím se Sdracem, komponenta se v tomto pripade nehodi. Nastesti jsem
pohyb objektu uz delal. Trochu jsem to zjednodusil, snad si to preberes, kdyby
neco nebylo jasne, klidne se zeptej. 
public class ObjectMover : GameComponent
{
InputState inputState;
public MovementObject movementObject;
MovementObject selectedObject;
bool isPressed = false;
Vector2 lastCursorPosition;
Point mousePressedPoint;
public ObjectMover(Game1 game)
: base(game)
{
this.inputState = new InputState();
}
public override void Initialize()
{
base.Initialize();
}
public override void Update(GameTime gameTime)
{
inputState.Update();
MouseState mouse = inputState.CurrentMouseState;
if (inputState.IsNewMouseLeftButtonPress())
mousePressedPoint = new Point(mouse.X, mouse.Y);
if (movementObject != null)
{
if (mouse.LeftButton == ButtonState.Released)
reset();
if (!isPressed)
if (movementObject.rectangle.Contains(mouse.X, mouse.Y) && mouse.LeftButton == ButtonState.Pressed && movementObject.rectangle.Contains(mousePressedPoint))
selectObject(entity);
if (isPressed && movementObject == selectedObject)
{
movementObject.isInMove = true;
Move(entity);
}
else
movementObject.isInMove = false;
}
base.Update(gameTime);
}
public void reset()
{
isPressed = false;
selectedObject = null;
}
private void selectObject(MovementObject entity)
{
isPressed = true;
selectedObject = entity;
lastCursorPosition = new Vector2(inputState.CurrentMouseState.X, inputState.CurrentMouseState.Y);
}
private void Move(MovementObject entity)
{
Vector2 drift = new Vector2(inputState.CurrentMouseState.X - lastCursorPosition.X, inputState.CurrentMouseState.Y - lastCursorPosition.Y);
entity.position += drift;
lastCursorPosition = new Vector2(inputState.CurrentMouseState.X, inputState.CurrentMouseState.Y);
}
}
Díky za rady. Pomocí proměnné mě to vůbec nenapadlo.
David Hartinger Ty cykly jsem tam měl z důvodu, abych rozpoznal na kterém domku
jsem najetý.
Zobrazeno 5 zpráv z 5.