kostenloser Webspace werbefrei: lima-city


Visual C# wie erkennt Objekt das anderes Objekt beruehrt hat

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    ahref2

    Kostenloser Webspace von ahref2, auf Homepage erstellen warten

    ahref2 hat kostenlosen Webspace.

    Hallo Jungs und Mädels
    ICh habe mich mal von C abgewendet und mich ein wenig in visual C # eingearbeitet. NUn wuerde ich gerne ein spiel machen, in dem es das ziel ist so schnell wie moeglich kloetze in eine "Box" zu tun. Doch ich verstehe nicht wie ich machen kann, dass ein klotz merkt das er soeben von einem Hacken berührt wurde, dem folgt und sich dann schliesslich abkoppelt und mithilfe eines timers dann hinunterfliegt (letzters weiss ich ungefaehr :D ) weiss jemand weiter, btw ist das ueberhaupt moeglich wenn nein gibt es einen anderen weg??
    Mfg Ahref2
    PS: soll ich denn bisherigen Code mal posten?

    also hier mal mein code. es sollte wahrscheinlich ungebrauchte uebrreste haben, da ich dort auch noch ein paar sachen probiert habe :D
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
         
    
            private void button1_Click_1(object sender, EventArgs e)
            {lblTest.Location = new Point(
                lblTest.Location.X + 20,
                lblTest.Location.Y);
    
    
            lblKran.Location = new Point(
            lblKran.Location.X + 20,
            lblKran.Location.Y);
    
            lblAusleger.Location = new Point(
            lblAusleger.Location.X + 20,
            lblAusleger.Location.Y);
    
    
            lblHacken.Location = new Point(
            lblHacken.Location.X + 20,
            lblHacken.Location.Y);
    
            }
    
    
            private void label1_Click(object sender, EventArgs e)
            {
               
            }
    
           
            private void label1_Click_1(object sender, EventArgs e)
            {
    
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                Text = "Hallo";
            }
    
            private void button1_Click_2(object sender, EventArgs e)
            {
                lblTest.Location = new Point(
                   lblTest.Location.X - 20,
                   lblTest.Location.Y);
    
                lblHacken.Location = new Point(
                   lblHacken.Location.X - 20,
                   lblHacken.Location.Y);
    
                lblAusleger.Location = new Point(
                   lblAusleger.Location.X - 20,
                   lblAusleger.Location.Y);
    
                lblKran.Location = new Point(
                     lblKran.Location.X - 20,
                     lblKran.Location.Y);
            }
    
    
            private void cmdEnde_Click(object sender, EventArgs e)
            {
                Close();
            }
    
            private void cmdOben_Click(object sender, EventArgs e)
            {
                lblTest.Location = new Point(
                    lblTest.Location.X, lblTest.Location.Y - 10);
    
                lblHacken.Location = new Point(
                   lblHacken.Location.X, lblHacken.Location.Y - 10);
    
                lblAusleger.Location = new Point(
                   lblAusleger.Location.X, lblAusleger.Location.Y - 10);
    
                lblKran.Location = new Point(
                   lblKran.Location.X, lblKran.Location.Y - 10);
    
    
    
    
            }
    
            private void überToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Welcome to the Wonderful World of Visual C#");
            }
    
            private void infoToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Welcome to the Wonderful World of Visual C#");
            }
    
            private void toolStripTextBox1_Click(object sender, EventArgs e)
            {
    
            }
    
            private void toolStripMenuItem1_Click(object sender, EventArgs e)
            {
    
            }
    
            private void überToolStripMenuItem_Click_1(object sender, EventArgs e)
            {
    
            }
    
            private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
            {
    
            }
    
            
    
            private void cmdUnten_Click(object sender, EventArgs e)
            {
                lblTest.Location = new Point(
                    lblTest.Location.X, lblTest.Location.Y + 10);
    
    
                lblKran.Location = new Point(
                    lblKran.Location.X, lblKran.Location.Y + 10);
    
    
                lblAusleger.Location = new Point(
                    lblAusleger.Location.X, lblAusleger.Location.Y + 10);
    
    
                lblHacken.Location = new Point(
                    lblHacken.Location.X, lblHacken.Location.Y + 10);
    
    
    
    
    
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                lblHacken.Location = new Point(
          lblHacken.Location.X + 311,
          lblHacken.Location.Y);
    
                lblAusleger.Location = new Point(
          lblAusleger.Location.X + 135,
          lblAusleger.Location.Y);
    
                
            }
    
            private void cmdSwitcher2_Click(object sender, EventArgs e)
            {
                lblHacken.Location = new Point(
          lblHacken.Location.X - 311,
          lblHacken.Location.Y);
    
                lblAusleger.Location = new Point(
          lblAusleger.Location.X - 135,
          lblAusleger.Location.Y);
            }
    
            private void button1_Click_3(object sender, EventArgs e)
            {
                lblHacken.Height = lblHacken.Width + 10;
                lblHacken.Location = new Point(
                    lblHacken.Location.X + 10, lblHacken.Location.Y);
                lblAusleger.Location = new Point(
                    lblAusleger.Location.X + 10, lblAusleger.Location.Y);
            }
        }
    }


    Beitrag zuletzt geändert: 9.2.2011 16:28:47 von ahref2
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo ahref2,

    um festzustellen, ob sich zwei Objekte berühren, musst Du überprüfen, ob sie sich überschneiden.
    Ich nehme jetzt mal an, dass lblTest einen Klotz darstellt und 20px * 20px groß ist. lblHacken ist der Hacken und nur ein Pixel groß ist.
    Dann wäre die Prüfmethode folgende:
    private bool is_touching()
    {
        if(lblHacken.Location.X < lblTest.Location.X || lblHacken.Location.X >= lblTest.Location.X+20)
        {
            return False;
        }
    
        if(lblHacken.Location.Y < lblTest.Location.Y || lblHacken.Location.Y >= lblTest.Location.Y+20)
        {
            return False;
        }
    
        return True;
    }

    Wenn der Hacken selber ein Klotz ist, dann musst Du alle vier Ecken des Hackens überprüfen.
    Falls der Hacken rund ist, dann muss der Abstand zwischen Klotz- und Kreismittelpunkt sowohl in x- als auch in y-Richtung kleiner als der Radius+0.5*[Kantenlänge des Klotzes] sein.
    Für komplexere Formen musst Du Dir dann halt entsprechend was einfallen lassen.

    Beitrag zuletzt geändert: 9.2.2011 21:06:22 von darkpandemic
  4. Autor dieses Themas

    ahref2

    Kostenloser Webspace von ahref2, auf Homepage erstellen warten

    ahref2 hat kostenlosen Webspace.

    hMM ich komm irwie nicht weiter. wie geht das jetzt genau mit der ueberpruefung, sitze seit einer h dran und versuche das anzuwenden. Vor allem: wie soll ich dann amchen das der klotz folgt???

    edit: naja es hat ein wenig geklappt, doch ich verstehe immer noch nicht wie der klotz dann folgt ( bisher wird dann eifach nur auf einem label was geschrieben... :D )

    Beitrag zuletzt geändert: 10.2.2011 15:04:19 von ahref2
  5. Hallo ahref2,

    der Code, den ich oben hingeschrieben habe, dient nur dazu, festzustellen, ob ein Punkt in einem Quadrat liegt.
    Normalerweise musst Du die Position des Kranhackens und des Klotzes immer kennen.
    Solange der Klotz nicht am Kran hängt muss man nach jeder Bewegung des Kranes überprüfen, ob der Hacken den Klotz berührt.
    Wenn der Hacken den Klotz berührt, dann musst Du Dir merken, dass der Klotz jetzt eingehängt ist. Das lässt sich am besten über eine boolsche Variable machen.
    Wenn der Klotz eingehängt ist, dann musst Du nach jeder Bewegung des Kranes den Klotz unter dem Hacken positionieren. Dann sieht das so aus, als ob der Kran den Klotz bewegt.
  6. http://dotnetperls.com/intersect


    mit intersect kannst du überprüfen ob ein punkt in einen Rechteck liegt. Oder ein Rechteck ein anderes schneidet
  7. Hallo marius71,

    Dein Tipp ist gut aber das Beispiel ist falsch. In dem Beispiel wird Array.Intersect() verwendet, was die Schnittmenge, also die Elemente die in beiden Arrays vorkommen, zurückliefert.
    Allerdings gibt es auch eine Rectangle.IntersectsWith() Methode, die man verwenden kann.
    Das sähe dann so aus:
    private bool is_touching()
    {
        Rectangle rectBox = New Rectangle(lblTest.Location.X, lblTest.Location.Y, 20, 20);
        Rectangle rectHacken = New Rectangle(lblHacken.Location.X, lblHacken.Location.Y, 1, 1);
    
        return rectBox.IntersectsWith(rectHacken);
    }
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!