Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
Paranormal
Redaktor
Avatar
Paranormal:27.10.2015 18:42

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):27.10.2015 18:52

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:27.10.2015 19:25

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):27.10.2015 19:35

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:27.10.2015 19:46

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
Odpovídá na Paranormal
Michal Žůrek (misaz):27.10.2015 19:50

a co to dělá?

Nahoru Odpovědět 27.10.2015 19:50
Nesnáším {}, proto se jim vyhýbám.
Avatar
Paranormal
Redaktor
Avatar
Paranormal:27.10.2015 19:53

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:27.10.2015 20:43

Přidáváš picturebox do Controls?

Nahoru Odpovědět 27.10.2015 20:43
Veni, vidi, programmato
Avatar
Tomáš Brůna
Redaktor
Avatar
Tomáš Brůna:27.10.2015 20:46

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:27.10.2015 20:54

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:27.10.2015 20:58

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:27.10.2015 21:01

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
Veni, vidi, programmato
Avatar
Tomáš Brůna
Redaktor
Avatar
Odpovídá na Paranormal
Tomáš Brůna:27.10.2015 21:02

aha, a co to píše?

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:27.10.2015 21:12

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:27.10.2015 21:14

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
Veni, vidi, programmato
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na D0ll0k
Paranormal:27.10.2015 21:50

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:27.10.2015 21:55

Do tý CreateShoot().

Nahoru Odpovědět 27.10.2015 21:55
Veni, vidi, programmato
Avatar
Jan Sála
Člen
Avatar
Odpovídá na Paranormal
Jan Sála:27.10.2015 21:55

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:28.10.2015 9:04

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:28.10.2015 9:48

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
Veni, vidi, programmato
Avatar
D0ll0k
Člen
Avatar
D0ll0k:28.10.2015 9:58

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
Veni, vidi, programmato
Avatar
Paranormal
Redaktor
Avatar
Odpovídá na D0ll0k
Paranormal:28.10.2015 10:45

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:28.10.2015 12:11

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):28.10.2015 12:20

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:28.10.2015 12:23

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
Odpovídá na Paranormal
Michal Žůrek (misaz):28.10.2015 12:24

máš zapnutý Timer?

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:28.10.2015 12:26

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):28.10.2015 12:29

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:28.10.2015 12:41

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):28.10.2015 12:47
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:28.10.2015 12:52

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):28.10.2015 12:53

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:28.10.2015 13:03

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):28.10.2015 13:14

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
Odpovídá na Michal Žůrek (misaz)
Paranormal:28.10.2015 13:15

jako například? :D

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):28.10.2015 13:28

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.