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
Fórum › .NET
Více směrů
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ě.
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);
}
}
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žení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 3 hosté
Podobná vlákna
Zmena smeru s mínusom — založil Peter
WinAPI změna velikosti dětského okna pouze v jednom směru — založil yaqwsx
Zobrazní více textu po kliknutí na více — založil Mesia
Více proměných — založil Hranicarrr
Více o Keyboard v c# — založil gameWriter
Moderátoři diskuze