Více směrů – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Více směrů – .NET – Fórum – Programujte.comVíce směrů – .NET – Fórum – Programujte.com

 

RePRO0
Super člen
10. 3. 2010   #1
-
0
-

Ahoj. Mám takový objekt, který ovládám šipkami. No, ale v čem je problém? Potřeboval bych, abych měl všechny "directions" směry. Chci, aby to šlo ovládat do všech směrů. Problém je, že teď zná pouze 4 základní směry (nahoru, dolů, doleva a doprava). Jediné, co znám, tak pouze souřadnice toho objektu. Určitě bych měl využít funkci Math.sin, ale vůbec mě nenapadá myšlenka... Poradí mi tu někdo? Díky

Nahlásit jako SPAM
IP: 83.240.104.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
liborb
~ Redaktor
+18
Guru
11. 3. 2010   #2
-
0
-

Pokud to chápu dobře, tak bych to řešil přes "úhel směru pohybu" (takový směrový vektor) a goniometrická funkce. Jinak řečeno pro směr nahoru je úhel roven 0°, pro doprava je roven 90°, pro směr dolů je roven 180° a pro doleva je 270°. Další směry jsou všechny ostatní úhly. Výpočet nové pozice by tedy vypadal asi nějak takto:




x = x + posun * sin(uhel)

y = y + posun * cos(uhel)



Celou dobu si musíš udržovat pozici (x, y) ve floatovém tvaru, protože jinak si to pro "malé úhly" na pixelovém rastru nebude fungovat úplně správně.

Nahlásit jako SPAM
IP: 85.207.166.–
RePRO0
Super člen
11. 3. 2010   #3
-
0
-

Díky, ale možná bych tu rád viděl i menší example. Nebo pokud někdo umí lépe gůglit jak já, tak hop sem s tím, děkuju

Nahlásit jako SPAM
IP: 83.240.104.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
liborb
~ Redaktor
+18
Guru
17. 3. 2010   #4
-
0
-

Tady je jeden menší example :smile1: . 3 TextBoxy, 1 TrackBar a objekt, který se "pohybuje" na časovač (Timer). Změnou TrackBar měníš úhel a tím se mění směr pohybu objektu.



public partial class Form1 : Form
{
private MoveableObject test;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
trackBar1.Minimum = 0;
trackBar1.Maximum = 359;

test = new MoveableObject();

timer1.Interval = 500;
timer1.Enabled = true;
timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
int angle;

angle = trackBar1.Value;
test.Move(angle);
textBox1.Text = test.x.ToString("F02");
textBox2.Text = test.y.ToString("F02");
}

private void trackBar1_Scroll(object sender, EventArgs e)
{
textBox3.Text = ((TrackBar)sender).Value.ToString();
}
}

class MoveableObject
{
public double x;
public double y;

public MoveableObject()
{
x = 0;
y = 0;
}

public void Move(int angle)
{
double rad = Convert.ToDouble(angle) / 180.0 * Math.PI;
// 1 == "rychlost" pohybu
x = x + 1 * Math.Sin(rad);
y = y + 1 * Math.Cos(rad);
}
}

Nahlásit jako SPAM
IP: 85.207.166.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

Podobná vlákna

Zmena smeru s mínusom — založil Peter

Více proměných — založil Hranicarrr

Více o Keyboard v c# — založil gameWriter

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý