Diskuze: Animovaná změna pozice - WinForms
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
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.
Mrkni na tohle http://www.itnetwork.cz/…yb-po-primce
Můžeš si na tom zvolit i rychlost pixelů za sekundu, pak už se funkce na
tohle dělá jedna báseň 
Jestli bys nevěděl jak na to tak ti klidně pomůžu.
Ahoj, tak jsem si to nějak prošel co v tom děláš a máš tam několi
nedostatků. 
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Vykresli(e.Graphics,ActualX,ActualY);
}
bude kreslit vždy jen výsledek a nikdy přechod.


Tvůj kód by teda mohl vypadat nějak takto, snažil jsem se toho moc
neměnit, ikdyž některé ty věci by se daly udělat i mnohem efektivněji

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace Test
{
public partial class Level1 : Form
{
public int StartX = 0;
public int StartY = 0;
public int ActualX = 0;
public int ActualY = 0;
public int FinishX = 0;
public int FinishY = 0;
public int speed = 5;
public Level1()
{
InitializeComponent();
}
private void Vykresli(Graphics g, int X, int Y)
{
g.FillRectangle(Brushes.DarkBlue, X, Y, 50, 50);
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Vykresli(e.Graphics, ActualX, ActualY);
}
private void pictureBox1_Click(object sender, EventArgs e)
{
MouseEventArgs me = (MouseEventArgs)e;
StartX = ActualX;
StartY = ActualY;
FinishX = me.Location.X;
FinishY = me.Location.Y;
plocha.Invalidate();
System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
myTimer.Tick += new EventHandler(moveTimer_Tick);
myTimer.Interval = 50;
myTimer.Start();
}
private void moveTimer_Tick(object sender, EventArgs e)
{
if (FinishX != ActualX)
{
if (FinishX < ActualX)
{
ActualX -= speed;
}
if (FinishX > ActualX)
{
ActualX += speed;
}
}
if (FinishY != ActualY)
{
if (FinishY < ActualY)
{
ActualY -= speed;
}
if (FinishY > ActualY)
{
ActualY += speed;
}
}
plocha.Refresh();
}
}
}
Zavedl jsem tam nové proměnné. Při vytvážení pohybu je dobré mít
totiž začátek, konec a aktuální hodnotu.
Pak jsem tam přidal ještě
pomyslný speed, která určuje o kolik se v daném čase má kostka posunout.
Co se týče události moveTimer_Tick, tak jsem jí docela předělal, protože
mě nedávala moc smysl jak jsi jí napsal, v jedné podmínce X zvětšíš a
ve druhé jí hned zmenšíš, asis jí moc neodladil.
Jinak v této události si na konci
volám zmíněný plocha.Refresh;, který jen provede pictureBox1_Paint už s
novýma souřadnicema. Takhle jak jsem ti to upravil je to už funkční,
samozřejmě je tam nedostatek v tom, že se ti posouvá vždy šikmo XY, a
když jeden parametr (X nebo Y) dosáhne cíle, tak se ti posouvá už jen
vodorovně nebo svisle, ale tak by se dalo jen lépe přepočítávat. 
Jinak ještě co se týče animací a obecného vykreslování, tak WF není
zrovna na to nejlepší. Dělal jsem docela dost programů na vykreslování a
animace a WF má docela problém s vykreslováním - co se náročnosti týče,
takže se ti může stát, že se ti to začne najednou sekat.
Obecně pro vykreslování a tyto
animace doporučuju WPF, je tam sice trochu jiný způsob, jakým vykreslování
programovat, ale pokud se ti to bude někdy sekat, tak bys měl přejít na WPF.
To je tak vše co bych k tomu měl. 
Díky
- na WPF jsem koukal
a radši chci přejít rovnou na MonoGame
Zobrazeno 4 zpráv z 4.