Diskuze: C# Jedna proměnná mezi třídami
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 21 zpráv z 21.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Když jí uděláš jako veřejnou a statickou, tak jí klidně můžeš sdílet. Ale je to takové prasácké řešení, zkus nastínit více problém a my ti poradíme lépe.
Podle čeho usuzuješ, že je to prasácké? Nechci nijak rýpat, jen mě to zajímá.
Tak já vím minimálně o dvou možnostech:
Class A
{
public static float f { get; set; }
}
Class B
{
ClassA.f = 0.5f;
}
nebo
ClassA
{
float f;
public ClassA()
{
ClassB NovaTridaB = new ClassB(f);
}
}
Class B
float f;
public ClassB(int parametr)
{
f = 0.5f;
}
{
}
Nejlépe to uděláš asi tak, že ji vytvoříš jako objekt, který předáš konstruktorům obou tříd.
Ty tvé kreace jsou pro mne poněkud nepochopitelné. Čeho chceš dosáhnout?
V tom, že by ty třídy byly navzájem závislé. To už bych si radši udělal strukturu/třídu s takovými daty a předal jí oboum těm třídám, které to budou využívat. Ale jak říkám, záleží na problému. Když mi řekne že je to class1 a class2 tak z toho nic nemám...
Podle původní ukázky soudím, že coolomboc vůbec nepotřebuje to, oč žádá. Raději bych počkal, až nám to blíže specifikuje.
public class Car : Microsoft.Xna.Framework.DrawableGameComponent
{
public Texture2D car;
private Game game;
public Vector2 c = new Vector2(150, 0);
public KeyboardState key;
private float rotation = 0.0f;
public Car(Game game)
: base(game)
{
this.game = game; // TODO: Construct any child components here
}
/// <summary>
/// Allows the game component to perform any initialization it needs to before starting
/// to run. This is where it can query for any required services and load content.
/// </summary>
public override void Initialize()
{
// TODO: Add your initialization code here
base.Initialize();
}
protected override void LoadContent()
{
car = game.Content.Load<Texture2D>(@"graphics\car");
base.LoadContent();
}
/// <summary>
/// Allows the game component to update itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
public override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
key = Keyboard.GetState();
// TODO: Add your update code here
if (key.IsKeyDown(Keys.Left))
{
c.X--; c.X--;
rotation = rotation - 0.02f;
}else
if (rotation < 0)
{
rotation = rotation + 0.025f;
c.X--;
}
if (key.IsKeyDown(Keys.Right))
{
c.X++;c.X++;
rotation = rotation + 0.02f;
} else
if (rotation > 0)
{
rotation = rotation - 0.025f;
c.X++;
}
base.Update(gameTime);
}
private void Exit()
{
throw new NotImplementedException();
}
public override void Draw(GameTime gameTime)
{
game.spriteBatch.Begin();
game.spriteBatch.Draw(car, new Vector2(c.X, 400), null, Color.White, rotation, new Vector2(car.Width / 2, car.Height / 2), 1, 0, 0);
game.spriteBatch.End();
base.Draw(gameTime);
}
}
}
Máš na to statickou metodu
float vzdalenost = Vector2.Distance(auto.pozice, zeď.pozice);
Pokud však jen vyhodnocuješ kolizi, použij raději
float vzdalenostNaDruhou = Vector2.DistanceSquared(auto.pozice, zeď.pozice);
Je podstatně rychlejší.
public class Bloky : Microsoft.Xna.Framework.DrawableGameComponent
{
private Game game;
public Random rand = new Random();
public bool preky = false;
public bool prekya = true;
public bool prekyb = false;
public bool prekyc = false;
public int rnd=0;
public Texture2D prekazka, prekazkaa, prekazkab, prekazkac;
public Vector2 pc = new Vector2(0, -50);
public Vector2 pb = new Vector2(0, -50);
public Vector2 pa = new Vector2(0, -50);
public Vector2 p = new Vector2(0, -50);
public float f = 1.0f;
public Bloky(Game game)
: base(game)
{
this.game = game;// TODO: Construct any child components here
}
/// <summary>
/// Allows the game component to perform any initialization it needs to before starting
/// to run. This is where it can query for any required services and load content.
/// </summary>
public override void Initialize()
{
// TODO: Add your initialization code here
base.Initialize();
}
protected override void LoadContent()
{
prekazka = game.Content.Load<Texture2D>(@"graphics\prekazka");
prekazkac = game.Content.Load<Texture2D>(@"graphics\prekazka");
prekazkab = game.Content.Load<Texture2D>(@"graphics\prekazka");
prekazkaa = game.Content.Load<Texture2D>(@"graphics\prekazka");
base.LoadContent();
}
/// <summary>
/// Allows the game component to update itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
public override void Update(GameTime gameTime)
{
// TODO: Add your update code here
if (p.Y > 600)
p.Y = -50;
if (pa.Y > 600)
pa.Y = -50;
if (pb.Y > 600)
pb.Y = -50;
if (pc.Y > 600)
pc.Y = -50;
if (f < 12)
f = 0.001f + f;
int rnd = rand.Next(0, 2000);
switch (rnd)
{
case 0: preky = true;
break;
case 500: prekya = true;
break;
case 1000: prekyb = true;
break;
case 1500: prekyc = true;
break;
}
if (preky == true)
{
p.Y += f;
}
if (prekya == true)
{
pa.Y += f;
}
if (prekyb == true)
{
pb.Y += f;
}
if (prekyc == true)
{
pc.Y += f;
}
base.Update(gameTime);
}
public override void Draw(GameTime gameTime)
{
game.spriteBatch.Begin();
game.spriteBatch.Draw(prekazka, new Vector2(0, p.Y), Color.White);
game.spriteBatch.Draw(prekazkaa, new Vector2(100, pa.Y), Color.White);
game.spriteBatch.Draw(prekazkab, new Vector2(200, pb.Y), Color.White);
game.spriteBatch.Draw(prekazkac, new Vector2(300, pc.Y), Color.White);
game.spriteBatch.End();
base.Draw(gameTime);
}
}
}
To ti nepřijde divné sem ten zdroják takhle vložit a to dokonce 2x zasebou? POUŽIJ TLAČÍTKO "VLOŽIT ZDROJOVÝ KÓD".
To chceš řešit kolize? To se řeší o úroveň výš (alespoň já bych to tak řešil, v XNA nedělám, tak třeba se to řeší jinak) v nějakém kontroleru, který spravuje všechny ty prvky.
Omlouvám se jsem strašný trolík a to tlačítko nefungovalo a stydím se za sebe
Vector umí porovnávat vzálenosti, tak to přes ty 2 vektory můžeš porovnat, nebo to také lze udělat skrze rectangle.
btw. vektory máš ve třídách veřejné, tak není problém je v Game1 porovnat.
Zobrazeno 21 zpráv z 21.