Avatar
Paranormal
Redaktor
Avatar
Paranormal:

Zdravím, Potřeboval bych zjistit jak bych mohl vícekrát použít jeden vytvořený picturebox. Jakoby ho třeba naklonovat.

Jde mi o to že dělám hru a nevím jak tam třeba střílet. Tak mě napadlo že bych mohl udělat jeden picturebox jako střelu a pak to jenom klonovat a jako střílet. Potom to samý ještě s něčím co bohužel nakreslit nejde. (Mám obrázek)

Nevím jestli to z tohohle pochopíte je to docela divně vysvětlený, ale kdo něco vymyslí tak díky moc :)

Odpovědět 27.10.2015 18:42
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Odpovídá na Paranormal
Michal Žůrek (misaz):

udělej si metodu createShot, která vytvoří picturebox, nastaví mu potřebné vlastnosti a přidá ho na formulář.

Nahoru Odpovědět 27.10.2015 18:52
Nesnáším {}, proto se jim vyhýbám.
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Paranormal:

Ano děkuji a ještě trochu poradit s tou metodou prosím :)

public void CreateShoot()
{
    PictureBox pb = new PictureBox();
    pb.BackgroundImage = "shot.png"; // Nefunguje, jak nastavím pozadí?
    pb.BackColor = ....; // Jak na Trasparent?
}
Nahoru Odpovědět 27.10.2015 19:25
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Odpovídá na Paranormal
Michal Žůrek (misaz):

Nefunguje, jak nastavím pozadí?

Image.FromFile("shot.png")

Jak na Trasparent?

// tuším, že
Color.Transparent
Nahoru Odpovědět 27.10.2015 19:35
Nesnáším {}, proto se jim vyhýbám.
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Paranormal:

Tak nevím proč, ale prostě to nejde :D

public void CreateShoot()
{
    PictureBox pb = new PictureBox();
    pb.Width = 5;
    pb.Height = 10;
    //pb.BackgroundImage = Image.FromFile("shot.png");
    pb.BackColor = Color.Red;
    pb.Left = pbShip.Left + (pbShip.Width / 2);
    pb.Top = pbShip.Top++;
}

private void ShootTimer_Tick(object sender, EventArgs e)
{
    CreateShoot();
}

Podle toho kódu by se to mělo každých 0,1s vygenerovat a letět nahoru.

Nahoru Odpovědět 27.10.2015 19:46
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Nahoru Odpovědět 27.10.2015 19:50
Nesnáším {}, proto se jim vyhýbám.
Avatar
Paranormal
Redaktor
Avatar
Paranormal:

No právě že nic, ani se to neoběví. Ale ještě mě napadá jestli se nějak nemusí ošetřit že to má být vykresleno na Panelu.. Jestli se to náhodou nevykresluje pod ten panel (který je na celou obrazovku) :D

Nahoru Odpovědět 27.10.2015 19:53
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Paranormal
D0ll0k:

Přidáváš picturebox do Controls?

Nahoru Odpovědět 27.10.2015 20:43
Ten, co se snaží "programovat"
Avatar
Tomáš Brůna
Redaktor
Avatar
Tomáš Brůna:

Zkus ještě toto na to nastavení toho obrázku:

obrazek.Image = new Bitmap("obrazek.jpg");
Nahoru Odpovědět 27.10.2015 20:46
Lepší být šprt než blbec :)
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na D0ll0k
Paranormal:

prosimtě, přesněji očem to mluvíš? :D

Nahoru Odpovědět 27.10.2015 20:54
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Tomáš Brůna
Paranormal:

Když sem to skusil tak se mi pokaždé sekl debuging nevim proč.

Nahoru Odpovědět 27.10.2015 20:58
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Paranormal
D0ll0k:

Já taky zrovna dělám s pictureboxem a taky jsem narazil na stejný problém. Šel jsem se tedy podívat do Form1.Designer.cs, kde jsou všechny kontrolky a úplně dole jsem narazil na:

//
//form1
//
...
this.Controls.Add(pictureBox1);

Jak vidíš, aby šel picturebox zobrazit nejdříve ho musíš přidat do form.

Nahoru Odpovědět  +1 27.10.2015 21:01
Ten, co se snaží "programovat"
Avatar
Tomáš Brůna
Redaktor
Avatar
Nahoru Odpovědět 27.10.2015 21:02
Lepší být šprt než blbec :)
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Tomáš Brůna
Paranormal:

Dělám si hru jen tak pro radost. Jak hýbeš vesmírnou lodí a ze zhora třeba něco padá a ty to sestřeluješ. Tak něco podobného :D Ale nějak sem se zasekl u toho střílení a u toho padání. :/

Nahoru Odpovědět  +1 27.10.2015 21:12
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Paranormal
D0ll0k:

Zapomněl jsem, že:

this.Controls.Add(pictureBox1);

je u panelu. U pictureboxu ho musis dat do layoutu:

layout.Controls.Add(picturebox);
Nahoru Odpovědět 27.10.2015 21:14
Ten, co se snaží "programovat"
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na D0ll0k
Paranormal:

A kam to mám jako napsat? :D do tý metody kde tvořím ten picturebox? Nebude jich pak přidaných desítky?

Nahoru Odpovědět 27.10.2015 21:50
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Paranormal
D0ll0k:

Do tý CreateShoot().

Nahoru Odpovědět 27.10.2015 21:55
Ten, co se snaží "programovat"
Avatar
skala_honza
Člen
Avatar
Odpovídá na Paranormal
skala_honza:

Když změníš pozadí komponenty nebo obecně pracuješ s grafikou, tak bys měl volat metodu Refresh()

Nahoru Odpovědět 27.10.2015 21:55
Když nevím co s tím tak je chyba v compileru.
Avatar
Paranormal
Redaktor
Avatar
Paranormal:

Tak už se v tom docela strácím :D
Takže chceme toto že? :D

public void CreateShoot()
{
    PictureBox pb = new PictureBox();
    layout.Controls.Add(pb);
    pb.Width = 5;
    pb.Height = 10;
    //pb.BackgroundImage = Image.FromFile("shot.png");
    pb.BackColor = Color.Red;
    pb.Left = pbShip.Left + (pbShip.Width / 2);
    pb.Top = pbShip.Top;
    pb.Top += 2;
}

private void ShootTimer_Tick(object sender, EventArgs e)
{
    CreateShoot();
    panel.Refresh();
}

Stejně to nejde :D CO je špatně prosím opravte :D¨Díky moc.

Nahoru Odpovědět 28.10.2015 9:04
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
D0ll0k
Člen
Avatar
D0ll0k:

Mě to tedy funguje.
Možná je chyba ve volání ShootTimer_Tick. Jestli je to metoda, kterou voláš timerem, zkus se podívat, jestli ji opravdu voláš, jestli jsi timer spustil.
Jinak picturebox jde dát i do panelu.

Nahoru Odpovědět 28.10.2015 9:48
Ten, co se snaží "programovat"
Avatar
D0ll0k
Člen
Avatar
D0ll0k:

A ještě jedna věc. Ten picturebox se nemusí dávat do panelu nebo do layoutu, můžeš ho dát i do form:

Controls.Add(pb);

Včera jsem byl uplně mimo.

Nahoru Odpovědět 28.10.2015 9:58
Ten, co se snaží "programovat"
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na D0ll0k
Paranormal:

Dobře vyzkouším to ;) dík moc.

Nahoru Odpovědět 28.10.2015 10:45
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Paranormal
Redaktor
Avatar
Paranormal:

Ne prostě to nejde :D Jestli tobě to jde prosimtě pošli mi třeba v .rar jak to máš udělaný protože už fakt nevím :(

Nahoru Odpovědět 28.10.2015 12:11
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Odpovídá na Paranormal
Michal Žůrek (misaz):

ono ti to asi funguje, ale jestli máš zakomentovaný ten řádek kde nastavuješ obrázek, tak tam máš jen průhledné pictureboxy.

Nahoru Odpovědět 28.10.2015 12:20
Nesnáším {}, proto se jim vyhýbám.
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Paranormal:

Já tam ten obrázek vůbec nemám. Mám tam ale barvu pozadí to by mělo vykreslit tedy červený obdelníček ne? to ale taky nevidím :)

pb.BackColor = Color.Red;
Nahoru Odpovědět 28.10.2015 12:23
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Nahoru Odpovědět 28.10.2015 12:24
Nesnáším {}, proto se jim vyhýbám.
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Paranormal:

Já to mám udělaný takhle: Když se zmáčkne mezerník tak se spustí timer a ten vytváří ty pictureboxy podle té metody a refreshuje panel.

Nahoru Odpovědět 28.10.2015 12:26
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Odpovídá na Paranormal
Michal Žůrek (misaz):

a funguje to I tak? Si tam hoď breakpoint, jestli se to skutečně zavolá.

Nahoru Odpovědět 28.10.2015 12:29
Nesnáším {}, proto se jim vyhýbám.
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Paranormal:

JJ, když do té metody CreateShot(); dám třeba něco jinýho. třeba aby s něco posunulo o x pixelů, posune se to takže ta metoda funguje.

Nahoru Odpovědět 28.10.2015 12:41
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Michal Žůrek (misaz):
layout.Controls.Add(pb);

posuň na konec metody (což by to sice nemělo způsobovat, ale chronologicky je to lepší) a zkus ji nahradit za

this.Controls.Add(pb);
Nahoru Odpovědět 28.10.2015 12:47
Nesnáším {}, proto se jim vyhýbám.
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Paranormal:

jj, helejce asi jsme se posunuli trochu dál :D

panel.Visible = false;

A najednou to tam bylo vidět :D Ta střela tam byla, ale jenom jedna a nehýbala se což jsou další problémy. Ale už víme že tam je schovaná pod tím panele. Jak s ní nahoru :D

Editováno 28.10.2015 12:52
Nahoru Odpovědět 28.10.2015 12:52
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Odpovídá na Paranormal
Michal Žůrek (misaz):

musíš ji posunout do toho panelu

panel.Controls.Add(...)
Nahoru Odpovědět 28.10.2015 12:53
Nesnáším {}, proto se jim vyhýbám.
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Paranormal:

jj super, už to mám.. A teď to nějak rozhýbat :D bohužel k tomu nijak nemůžu abych to rozhýbal v timeru protože to v tom timeru vůbec nevidím :/

Nahoru Odpovědět 28.10.2015 13:03
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Odpovídá na Paranormal
Michal Žůrek (misaz):

to protože si to musíš uložit někam, tak abys to viděl.

Nahoru Odpovědět 28.10.2015 13:14
Nesnáším {}, proto se jim vyhýbám.
Avatar
Paranormal
Redaktor
Avatar
Nahoru Odpovědět 28.10.2015 13:15
„Když toho moc neumíme tak jsme na nejlepší pozici se něčemu naučit.“
Avatar
Odpovídá na Paranormal
Michal Žůrek (misaz):

vytvoříš proměnnou na formuláři a uložíš to do ni.

class Form {
        PictureBox shoot; // v kódu s ní budeš pracovat jako this.shoot
}
Nahoru Odpovědět 28.10.2015 13:28
Nesnáším {}, proto se jim vyhýbám.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 36 zpráv z 36.