Button wie Ping Pong abprallen lassen.
-
einfach die dicke des balkens durch 2 dazu addieren - schon hast du den auesseren rand
zb
rand rechts = balken.center + (balken.dicke / 2)
rand links = balken.center - (balken.dicke / 2)
rand oben = balken.center + (balken.hoehe / 2)
rand unten= balken.center - (balken.hoehe / 2)wegen der richtung hast du verstanden?
falls nicht nochmal genauerjede richtung wird jeweils um ein wert erhoeht - zb 1 fuer nach links und 1
fuer nach oben
dirX = 1;
dirY = 1;pos.X += dirX;
pos.Y += dirY;nun trifft der ball auf eine wand - also muss die jeweilige richtung umgekehrt werden
dirX *= -1;
dirY *= -1;
(wert mal -1 kehrt ihn um)feddich ist
wenn du irgendwann die "geschwindigkeit" erhoehen willst, brauchst du nur dirX und dirY einen hoeheren wert zuweisen
-
Vielen Dank.
ja ich habe es jetzt kapiert.
Ich war nur verwundert warum *= -1 aber ich habe dann eh verstanden, dass damit die richtung umgekehrt wird.
mfg Mongole.
Vll habe ich noch andere Fragen, aber soweit ist alles Klar^^
-
Nein eins verstehe ich immer noch nicht.
ICh weiß jetzt die Balken Dicke usw.
Aber wie kann ich es jetzt machen, dass es nur am Balken abpralllet?
WEnn ich das so eingebe:
if(location.X == balken.seite.rechts) tue was;
Dann prallt er immer ab wenn er auf gleicher Linie ist wie der Balken. Auch wenn er darüber ist.
Gibts da nen extra WEg ohne jede Mögliche Koordinatenpaarungen durchzugehen?mfg Wandelnder Mongole
-
Das Problem habe ich nun auch gelöst^^
Aber ich habe jetzt versucht das ganze so zu machen, dass man den Balken bewegen kann.
Dies habe ich, um nicht dauernd die Taste zu drücken, dass sich der Button bewegt, mit einem Timer versucht.
Der ERgebnisscode wäre bei mir der:
private void timer1_Tick(object sender, EventArgs e) { Point location = this.button1.Location; switch(e.KeyCode) { case Keys.Up: this.button1.Location = new Point(location.X, location.Y - 1); break; case Keys.Down: this.button1.Location = new Point(location.X, location.Y + 1); break; } }
Aber nun erkennt er e.KeyCode nicht.
"System.EventArgs" enthält keine Definition für "KeyCode", und es konnte keine Erweiterungsmethode "KeyCode" gefunden werden, die ein erstes Argument vom Typ "System.EventArgs" akzeptiert. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)Das ist die Fehlermeldung.
Ich weiß nun aber nicht, was ich stattdessen verwenden soll.
ODer gibt es eine noch bessere Methode?
mfg Wandelnder Mongole
-
also ich hab keine ahnung von spiele programmierung aber ich find die idee gut ein timer laufen zu lassen der den button bewegt bei bedarf
keyboard events werden nicht in timern weiter geleitet
nimm statt dessen die statische funktionKeyboard.IsKeyDown(Key.Down) Keyboard.IsKeyDown(Key.Up)
dann kannst du entsprechend reagieren
------------ich moechte dich nicht rein reden, nur, wie hast du dein design? loest du alles direkt mit buttons und location?
ich wuerde es so gestalten
es gibt ein "balken" objekt, das erfaehrt wie tief und wie hoch er maximal darf sowie wie weit er sich bewegen darf, und er definiert eine "Area", das ist der bereich den der button einnimmt
das selbe mit den waenden - diese definieren ebenfalls eine Area
dann gibts ein objekt "Ball" - welches auch eine Area definiert - bietet sich also an das alle 3 objekte vom selben parent erbenwenn der ball sich dann bewegt hat - kannst du fragen wie die neue richtung ist
z.B.:if(Balken.Area.Cross(Ball.Area)) Y = Balken.Area.Direction; if(Wall.Area.Cross(Ball.Area)) X = Wand.Area.Direction;
und wenn du es ganz simpel machen moechtest dann
Y = Balken.Area.NewDirection(Ball.Area); X = Wand.Area.NewDirection(Ball.Area);
dann prueft die Area selber ob die uebergebene area im eigenen bereich ist - wenn ja wird die umgekehrte richtung an gegeben
animation des ball flugs in einem timer, und die der tasten drucke auch in einen eigenen - da kannst du ja sowas machen
Ball.Move(X, Y); Balken.Move(X, Y);
sobald du das alles design technisch n bissl umgesetzt hast, dann brauchst du keine buttons mehr sondern kannst andere objekte nehmen - zb rectangles fuer balken und waende und eine ellipse fuer den ball - buttons sind eigentlich eh unnuetz da du keine button funktionalitaet brauchst
farben - formen - groessen usw brauchst du dann nur noch beim erstellen der spielflaeche definieren - die das eigentliche objekt und die Areas nehmen es an und arbeiten dann damit - dann hast du die magic numbers auch reduziertalles nur ansaetze die ich gehen wuerde - wie gesagt ich moechte dir nicht rein reden {o; (wobei das hier alles nur pseudo ist, hab ich mich grossteils beim tippen ausgedacht #gg)
-
Okay.
Da verstehe ich jetzt einiges nicht.Ich soll also nun ein Objekt Ball, Wand, und Balken machen.
Dann soll ich eine Area machen??(Wie geht das und was ist damit gemeint?)Das mit den Balken und Buttons war immer grundsätlich ein Problem, da wenn ich einen Button bewegen mochte. Die auswahl von dem Button sich dauernd ändert.(Einaml button1 dann Button2)
Nun noch ne Frage: Area = Bereich in Koordinaten angegeben??
Und ich finde keine Elippsen und ricliwas^^ Wo finde ich die?mfg Mongole
Ps: Ich bin jetzt auch angemeldet.
-
Jetzt nachdem ich das entsprechende Kapitel in meinem Buch nochhmal gelsesn habe. habe ich es verstanden.
Mein Code:private void Form1_Paint(object sender, PaintEventArgs e) { SolidBrush Pinsel = new SolidBrush(Color.Firebrick); e.Graphics.FillEllipse(Pinsel, XBall, YBall, 20, 20); SolidBrush PinselStange = new SolidBrush(Color.Black); e.Graphics.FillRectangle(PinselStange, XBalken, YBalken, 20, 200); SolidBrush PinselWand = new SolidBrush(Color.Blue); e.Graphics.FillRectangle(PinselWand,0,0, 20,395); e.Graphics.FillRectangle(PinselWand, 0, 0, 550, 20); e.Graphics.FillRectangle(PinselWand, 0, 395, 550, 20); }
Nun ist meine Frage wie ich nun ein Objekt Ball herstellen kann. Das objekt Ball soll nämlich genau diese Ellipse sein.
Wie könnte ich das machen?mfg Mongole
-
Na siehste geht doch
Jezt machst du dir für den Ball und die Paddels noch ein eigenes Object. Diesen Objekten kannst du dann auch gleich den Pinsel zuordnen und must diesen nicht jedesmal mal in der Paint-Methode neu erzeugen.
Aus YBall und XBall wird dann z.B. Ball.X und Ball.Y
MfG
Marco
-
Ja mein Problem ist es wie ich diese obejecte mache...
Obj.Ball geht iwie ned....
Und ich weiß bnicht wo ich das hinmachen muss...
Ob ichs gleich zur DrawMethode geben soll oder waonders.mfg
-
class Ball { ... }
Grundlagen
-
Ich habe es so versucht, aber es ging nicht.
Ich habe eine neue Klasse hinzugefügt Namens Ball, aber da konnte ich die Daten von der Ellipse nich reingeben.
Und wenn ich class Ball mache dann funktioniert es auch nicht.class Ball { SolidBrush Pinsel = new SolidBrush(Color.Firebrick); e.Graphics.FillEllipse(Pinsel, XBall, YBall, 20, 20);
}
Ich weiß nicht wie ich das bei dem gezeichneten machen soll.....
Wie soll ich das machen?mfg Mongole
-
Warum wusste ich nur das die Fragen nun kommen?
Ich kann mich nur wiederhohlen .. lerne die Grundlagen.Es gibt diverse Möglichkeiten sich ein Klasse Ball zu erstellen
class Ball { int x; int y; int Radius; SolidBrush Pinsel; public Ball() { x = 0; y = 0; Radius = 20; Pinsel = new SolidBrush(Color.Firebrick); } public void paintMe(Graphics g) { g.FillEllipse(Pinsel, x, y, Radius, Radius) } }
Oder folgendes geht auch
class Ball { int Radius; Point Location; SolidBrush Pinsel; public Ball() { Radius = 20; Loacation = new Point(0, 0); Pinsel = new SolidBrush(Color.Firebrick); } public void paintMe(Graphics g) { g.FillEllipse(Pinsel, Location.x, Location.y, Radius, Radius) } }
Tja und wo das ganze nun platzieren, ist dir fast ganz alleine überlassen.
Ich würde es wie folgt machen!
namspace Project { class Ball { ... } class Form1 : Form { Ball MyBall; static void Main (Strin[] args) { MyBall = new Ball(); ... } private void Form1_Paint(object sender, PaintEventArgs e) { MyBall.paintMe(e.Graphics); ... } } }
Ob jetzt im einzelen alles funktioniert was ich da geschriben habe kann ich nicht versprechen, alles ausm Kopf dahin gekritzelt. Es soll aber auch nur ein Gerüst sein.
Bitte ... lerne die Grundlagen
MfG
Marco
-
Sry mit den Objekten bin ich nicht weit gekommen....
Ich habe es jetzt auf eine für mich einfachere Variante gemacht die auch ziemlich gut funktioniert^^Danke für die Hilfe ich habe wieder mal viel dazugelernt.
Grundlagen habe ich eig schon gelernt. Nur halt nur mit Hilfe eines Buches und ohne Lehrer... da kann schon was abhanden kommen.
Vielen dank für die Hilfe.mfg Mongole