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.

Člen

Zobrazeno 21 zpráv z 21.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.