Diskuze: Správný návrh událostí
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 7 zpráv z 7.
//= 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.
Nechci zakládat nové vlákno. Nevíte proč to padá :/
tx = new Texture2D(device, rect.Width, rect.Height);
Color[] p = new Color[rect.Width * rect.Height];
for (int i = 0; i < p.Length; i++)
p[i] = Color.Blue;
tx.SetData(p);
Spadne to hned na prvním řádku, kdy se zakládá textura
HRESULT: [0x80070057], Module: [Unknown], ApiCode: [Unknown/Unknown], Message: The parameter is incorrect.
Používám MonoGame pro Win8 (Metro). Nesetkali jste se s tím někdo ?
Jen jsem natom koukl, použilíval jsi to už v praxi? Jde mi jen o to, že
tam je docela dost věcí, které ti chybí(nebo alespoň mi by chyběly), ale
na ně přijdeš sám postupem času
Btw, řekl bych že se VS nebude líbit, že máš nazvanou třídu jako jejich,
ale tím si teď nejsem jistý.
EDIT: K tvojí chybě našel jsem toto:
Looks like a corrupted assembly being referenced.
Clear both:
the \bin folder of your project
the temp folder (should be C:\Users\your_username\AppData\Local\Temp\Temporary ASP.NET Files in windows 7)
and see if the error still happens
from stackoverflow.com
Tak jsem ještě googloval a vypadá to na nějaké dll-ka nebo něco s registrama, však dej do googlu ten error + typ OS a chybu vyřešíš i sám.
Ano, vytvoření takto textury v klasickém XNA / MonoGame pro Desktop funguej zcela v pořádku. V projektu i na jiných místech takto taky tvořím textury a funguje to. Textury slouží jenom pro debug (zde například kolize myši s tlačítkem).
Když nevyužívám WinForm stejný název podle mě nevadí
Prosím znova o pomoc. Mám tedy třídu Button obsahující event Click. Ve třídě Menu (představuje menu), mám několik Buttonu. Každému Buttonu přiřazuju stejnou metodu pro obsluhu Click.
double width = g.CoreScreen.Bounds.Width;
double height = g.CoreScreen.Bounds.Height;
string[] names=new string[]{"New Game","Load Game","Settings"};
for (byte i = 0; i < 3; i++)
{
Vector2 size=g.FontGinkoBig.MeasureString(names[i]);
buttons.Add(new Button(null,g.FontGinkoBig,new Vector2((int)(width/2-size.X/2),250+(i*size.Y+25)),names[i],i));
buttons[i].Click+=Menu_Click;
}
Metoda Menu_Click
private void Menu_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
switch (btn.ID)
{
case 0: break;
case 1: break;
case 2: break;
}
}
Třída Button
class Button
{
Texture2D texture;
Rectangle rect;
Vector2 textPosition;
SpriteFont font;
Color color;
string text;
public byte ID { get; private set; }
public event EventHandler Click;
public event EventHandler Hover;
public Button(Texture2D texture, SpriteFont font, Vector2 position, string text, byte id )
{
this.texture = texture;
this.text = text;
this.font = font;
this.ID = id;
Hover += Button_Hover;
color = Color.White;
Vector2 fontSize = font.MeasureString(text);
int size = (int)(fontSize.X);
this.textPosition = new Vector2(position.X + text.Length, position.Y);
this.rect = new Rectangle((int)textPosition.X, (int)textPosition.Y, size, font.LineSpacing);
}
void Button_Hover(object sender, EventArgs e)
{
color = Color.Red;
}
public void Draw(BetterSpriteBatch spriteBatch)
{
if (texture != null)
spriteBatch.Draw(texture, rect, Color.White);
spriteBatch.DrawString(font, text, textPosition,color);
}
public void Draw(BetterSpriteBatch spriteBatch, Texture2D tx)
{
if (texture != null)
spriteBatch.Draw(texture, rect, Color.White);
spriteBatch.Draw(tx, rect, Color.White);
spriteBatch.DrawString(font, text, textPosition, color);
}
public void Update(Rectangle mouse,bool clicked)
{
color = Color.White;
if (CheckCollision(mouse) && clicked)
{
Click(this, EventArgs.Empty);
}
else if (CheckCollision(mouse))
Hover(null, EventArgs.Empty);
}
public bool CheckCollision(Rectangle rect)
{
return this.rect.Intersects(rect);
}
}
Při kliknutí se v pohodě metoda Menu_Click zavolá, sender se správně
přetypuje na Button ale jakmile to skočí do switche hází mi to tuto
chybu
(DisconectedContextException)
Transition into COM context 0xa1e948 for this RuntimeCallableWrapper failed with the following error: Exception from HRESULT: 0xE0434352. This is typically because the COM context 0xa1e948 where this RuntimeCallableWrapper was created has been disconnected or it is busy doing something else. Releasing the interfaces from the current COM context (COM context 0xa1e890). This may cause corruption or data loss. To avoid this problem, please ensure that all COM contexts/apartments/threads stay alive and are available for context transition, until the application is completely done with the RuntimeCallableWrappers that represents COM components that live inside them.
Prosím, co dělám špatně ? Nebo je návrh zcela v pořádku a já zase mám někde nějakou pitomost ?
//EDIT
Když vyhodím switch a zkusím to přes podmínky, vše funguje. Co je tohle
zase za chybku ?
Nevíte někdo ?
Zobrazeno 7 zpráv z 7.