#6 Doomista
Trochu jsem to musel predelat, ale zaklad je vicemene spravny. Vyuzivam k tomu cyklus i poli, ktere jsem konecne alepson castecne pochopil. Dekuji za uzitecne rady ;)
Příspěvky odeslané z IP adresy 62.168.1.–
#2 Doomista
Nevim jestli si plně rozumíme, ale pokud ano tak toto jsem zkoušel. Jenže když
kreslici_plocha.FillEllipse(Brushes.Red, xElipsy, yElipsy, 19, 19);
xElipsy a yElipsy budou pole, a já posléze zvednu ID, stále se vykreslí pouze JEDNA tečka... Možná že to myslíš jinak, nebo by to šlo "ochcat" přes cyklus, ale nejsem tak zdatný abych to sám sesmolil.
K druhému příspěvku, ano používám double buffering, o triple b. jsem nic neslyšel, když by to fungovalo (vykreslování teček) plně by mi to stačilo, s těmito vykreslenými daty již nic dělat nebudu. (jestli jsem to správně pochopil.) Přidávám úplný kód formuláře:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Panacek
{
public partial class Form3 : Form
{
int xElipsy = -300;
int yElipsy = -300;
int xPanak = 22, yPanak = 29;
Image PANAK = Properties.Resources.panacek;
Image PANAK_zada = Properties.Resources.panacek_zada;
Image PANAK_bilej = Properties.Resources.panacek_white;
Image PANAK_bilej_levo = Properties.Resources.panacek_white_left;
Image PANAK_bilej_pravo = Properties.Resources.panacek_white_right;
Graphics kreslici_plocha;
public Form3()
{
InitializeComponent();
}
private void Form3_Load(object sender, EventArgs e)
{
label1.Text = Panacek.Form1.Score.ToString();
}
private void Form3_Paint(object sender, PaintEventArgs e)
{
kreslici_plocha = e.Graphics;
kreslici_plocha.DrawImage(PANAK, xPanak, yPanak, 45, 45);
kreslici_plocha.FillEllipse(Brushes.Red, xElipsy, yElipsy, 19, 19);
}
private void Form3_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.W:
yPanak -= 8;
PANAK = PANAK_zada;
break;
case Keys.S:
yPanak += 8;
PANAK = PANAK_bilej;
break;
case Keys.A:
xPanak -= 8;
PANAK = PANAK_bilej_levo;
break;
case Keys.D:
xPanak += 8;
PANAK = PANAK_bilej_pravo;
break;
case Keys.Space:
xElipsy=xPanak;
yElipsy=yPanak;
Refresh();
break;
case Keys.F12:
Application.Exit();
break;
}
Refresh();
}
Nejdůležitější části: Samotné vykreslení tečky + příkaz na mezerníku.
Pokud by mi někdo dal nějaký názorný příklad budu jedině rád. Předem dík za ochotu. Pokud budou potřeba ještě nějaké info. dodám.
Zdravim,
můj problém spočívá v tom, že mám primitivní hru (nejsem příliš pokročilý uživatel, ale něco zvládnu a většinu kódů si přelouskám), princip je jednoduchý, pohybujete se s panáčkem a sbíráte kuličky, to vše funguje, můj kámen úrazu je v druhé části, kdy potřebuji z kuliček "stavět", neboli přepnu si do druhého formuláře a chci aby se tečka zobrazila na pozici panáčka (také funguje)
private void Form3_Paint(object sender, PaintEventArgs e)
{
kreslici_plocha = e.Graphics;
kreslici_plocha.FillEllipse(Brushes.Red, xElipsy, yElipsy, 19, 19);
}
---
case Keys.Space:
xElipsy=xPanak;
yElipsy=yPanak;
Refresh();
break;
Ale teď přichází kámen úrazu -> když přejdu na jinou pozici a chci znovu vykreslit kuličku, kulička se jen překreslí, nevytvoří nová (změní se souřadnice). A zde potřebuji pokud možno radu. Pevně věřím že to bude něco jednoduchého (i když ne, děkuji za každou radu). Jak již jsem řekl, nejsem moc pokročilý, proto jsem zkoušel najít různé kódy, bez úspěchu. (Není tu nějaka možnost na vyřešení přes cyklus, pole, save obrazovky, nějaké zakomponování "new"?) Doufám, že jsem popsal problém rozumě a smysluplně a že mi někdo poradí, předem děkuji za pomoc. btw jazyk: C#