Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 13:37

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Spiel grenze/Mauer Programmierung

Discussion on Spiel grenze/Mauer Programmierung within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2013
Posts: 131
Received Thanks: 11
Question Spiel grenze/Mauer Programmierung

schönen guten tag
Ich möchte anhand eines Tracking codes den ich Programmiert habe
der reagiert auf zusammen Stöße (wen eine picbox auf eine andere trift das etwas passiert)
ein zusätzlichen code hinzufügen der lauten soll;
das Die Picbox Location abgefragt wird und dann im gleichen Moment
auch als Position dieser Picbox bestimmt werden soll
Ich habe mir das so vorgestellt das
wen sie zusammen stoßen diese beiden Picboxen
das der eine davon quasi vor der anderen Picbox stehen bleibt
eine art "Mauer" das es eben hier nicht weiter geht.
(vorzustellen ist dies mit einem Computer rpg spiel das wen man nicht weiter gehen kann/soll wegen einer mauer)
wäre schön wen ihr mir da helfen könnt anhand eines Beispiels + Erklärung dazu bitte ich möchte daraus lernen und später es selbst Programmieren können

Vielen dank in voraus ! :3

Ahja bevor ich es vergesse ich mache das in VB.net (Visualbasic Comunity version)
ProDielerNR(1) is offline  
Old 01/05/2018, 22:56   #2
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,487
Ne Kollisionserkennung mit 4-Ecken ist kein Hexenwerk.

Das Youtube Video hier illustrierts ganz gut.

Damit hast du den Code, der sagt obs kollidiert oder nicht.
Nun hast du aber eine Bewegung. d.H. du willst überprüfen ob es kollidiert, musst aber aufgrund der Bewegung auch wissen in welcher Richtung du kollidiert bist. Auch dafür lassen sich Bedingungen aufstellen.

Am einfachsten ist es, das in deinen Code einzubauen, der die Box bewegt. Dort kannst du überprüfen ob sich "durch die bewegung in die geforderte Richtung" eine Kollision ergibt und dementsprechend diese Richtung sperren aka. nicht in die Richtung bewegen.
florian0 is offline  
Thanks
2 Users
Old 01/06/2018, 00:10   #3
 
elite*gold: 0
Join Date: Jan 2013
Posts: 131
Received Thanks: 11
Okay ich verstehe was du meinst :?
Ich habe mal einer der codes nach gebildet nur erkennt er die seiten XY nicht :?
Ich schätze die muss ich Deklarieren als seiten Verhältnis der form ?
oder der Seiten Verhältnis der Picbox ?
Laut video die form :?
Tut mir wirklich leid aber ich kann nicht so gut english und hab daher versucht
an Hand seiner Zeichnungen schlau zu werden ^^"
Ich schaue mir dacher auch meistens deutsche Tutorials an
aber davon gibt es nun mal nicht so viele wie im englishen D:
ab und zu wen ich mal zeit habe versuche ich allerdings mein english zu verbessern
also ja ich lerne es bereits schon =)
ProDielerNR(1) is offline  
Old 01/06/2018, 09:24   #4
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,487
X und Y ist logischerweise die Position der Box. Bei .NET ist die nochmals in eine Struktur gekapselt. Position müsste die Eigenschaft heißen.
florian0 is offline  
Thanks
1 User
Old 01/06/2018, 12:04   #5



 
Serraniel's Avatar
 
elite*gold: 0
The Black Market: 205/1/0
Join Date: May 2010
Posts: 6,853
Received Thanks: 5,106
Glaube die GUI Komponenten haben Left und Top Properties für die Position auf dem Formular (statt X und Y) sowie dann Width und Height für die Größe.

Allerdings solltest du die Datenstrukturen von der Oberfläche trennen, also Klassen schreiben für dein "Spielbrett" und deine "Objekte", die dann auch Positionen haben. Durch die Auftrennung wird dein Code sehr wahrscheinlich übersichtlicher werden. Zudem kannst du dann das Zeichnen des Spielbretts im gesamten nach einer "Runde" / einem "Tick" durchführen. So kannst du später auch das Rendering von Oberflächenkomponenten weg umstellen und direkt auf die Oberfläche zeichnen, wenn du soweit bist. Gehört aber natürlich auch ein wenig Fleißarbeit dazu.
Serraniel is offline  
Thanks
1 User
Old 01/06/2018, 14:38   #6
 
elite*gold: 0
Join Date: Jan 2013
Posts: 131
Received Thanks: 11
hm :?
Ich hab das mal mit dem Left und Top Versucht
aber hier bei erziele ich das gleiche Ergebnis wie wen ich Widht und Height nehme
Durch den Reaktion code von mir Reagiert er sofort wen er die Picbox berühren tut und
dem nach auch den code durch den ich im video gesehen habe und von euch noch einmal
Erklärt bekommen habe (Ich weiß florian sagte ich solls in die Steuerung machen nachehr wen ich alle Richtungen abgleichen möchte) Aber ich wollte es erstmal mit nur einer Richtung aus Probieren was leider nicht wirklich geklappt hat.
Der reaktions code Springt an + mit der Programmierung aus dem Video
Nur Springt er in jeglicher hinsiecht auf jede Seite an was ja eigentlich nicht sein sollte
eine der seiten sollte ja eigentlich nicht durch querbar sein bzw sollte den Code aus dem Video nicht mehr reagieren da es ja nicht mehr um die Seite gilt die wir ansprechen wollen :?

Code:
'Versuch 1
 If ((picbox1.Width + picbox1.Height)) >= (picbox2.Width) Then


End If
'Versuch 2

If ((picbox1.Left + picbox1.Top)) >= (picbox2.Left) Then


End If
Ich hab auch versucht mit

If ((picbox1.Left+ picbox1.height)) >= (picbox2.Left) Then


End If

oder anderes herum was auch nicht funktioniert hatte

Code:
Dim Mindex As Integer
Dim pbxmyEnemies(9) As PictureBox
Public WithEvents Mauer As New Timer
Public WithEvents Picbox1 As New PictureBox
Public WithEvents Picbox2 As New PictureBox

Private Sub Mauer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Mauer.Tick

        'Mauer Abfrage
        pbxmyEnemies(0) = Me.Picbox2
     

        For Me.Mindex = 0 To 9 'Es sind mehre Abfragen die ich mache nur habe ich hier jetzt nur den einen raus gesucht der eben nun für unser code zuständig ist
            Mindex = 0
            If Me.Picbox1.Bounds.IntersectsWith(pbxmyEnemies(Mindex).Bounds) Then
                If ((Picbox1.Width + Picbox1.Height)) >= (Picbox2.Width) Then


                End If
            End If
        Next
    End Sub
Das ist Übrigens der code der eben auf Reaktion achtet wen 2 Picboxen
Kollidieren
ProDielerNR(1) is offline  
Old 01/06/2018, 19:53   #7



 
Serraniel's Avatar
 
elite*gold: 0
The Black Market: 205/1/0
Join Date: May 2010
Posts: 6,853
Received Thanks: 5,106
Hab mal die API durchstöbert, alles kenn ich ja auch nicht auswendig, wie wäre es hiermit?

PHP Code:
if (picture1.Bounds.IntersectsWith(picture2.Bounds) {
  
// Collision detected

Serraniel is offline  
Thanks
1 User
Old 01/06/2018, 20:09   #8
 
elite*gold: 0
Join Date: Jan 2013
Posts: 131
Received Thanks: 11
Code:
If (Picbox1.Bounds.IntersectsWith(Picbox2.Bounds)) Then

End If
Ich musste deinen Code etwas umschreiben damit der den Aczeptierte
Aber auch hier ist das selbe Problem
das Jede Seite reagiert :?

Die seite die du mir aber verlinkt hast sieht sehr interessant aus
Ich werde mich mal durch stöbern :3

Okay die seite scheint mir bei diesem Problem nicht wirklich mir weiter zu helfen aber es ist dennoch interessant zb habe ich gelesen (Falls es stimmt und ich nicht etwas falschen raus gelesen habe)
das ich mit dem unteren codes quasi auf der form selbst mahlen kann
ohne Picboxen und das alles mit dem Draw event :?
ProDielerNR(1) is offline  
Old 01/06/2018, 20:24   #9



 
Serraniel's Avatar
 
elite*gold: 0
The Black Market: 205/1/0
Join Date: May 2010
Posts: 6,853
Received Thanks: 5,106
Das ist korrekt. Das selbst zeichnen war das was ich in meinem ersten Beitrag auch andeuten wollte

Soll die Kollision nicht von allen Seiten erkannt werden? Wenn ja dann kannst du den Collision Check ja einfach in den Szenarien skippen, wo er erlaubt sein soll.
Serraniel is offline  
Thanks
1 User
Old 01/06/2018, 20:32   #10
 
elite*gold: 0
Join Date: Jan 2013
Posts: 131
Received Thanks: 11
Der Kollision check soll schon in erster linie auf alles reagieren (Jegliche Seite)
da ich den auch nutze um zb neue Lvls zu Generieren und das Alte zu Removen
aber ich dachte mir das könnte man sicher doch auch für Wände gebrauchen
und diese spalte dann neu zu Definieren in dem sinne das der Tracking code als erstes
genommen wird damit er erkennt okay ich werde angesprochen aber im nächsten Moment direct der zweite befehl ausgelöst wird wo noch mal abgefragt wird wo der Kollidiert also welche Seite genau
Sprich wenn Bild A auf Bild B Trift
soll dann der nächste code abgefragt werden dieser lauten soll
Wenn A auf bild B Rechte seite zb Trift Soll A stoppen oder zumindest sich nicht mehr bewegen können (Wie eine art mauer eben)
Hoffe man kann es soweit verstehen was ich meine :'D

In wie fern Skippen ? :?
das verstehe ich noch nicht so ganz ^^"
bin leider sehr leicht zu verwirren °^°
ProDielerNR(1) is offline  
Old 01/07/2018, 18:21   #11
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
Quote:
Originally Posted by ProDielerNR(1) View Post
Der Kollision check soll schon in erster linie auf alles reagieren (Jegliche Seite)
da ich den auch nutze um zb neue Lvls zu Generieren und das Alte zu Removen
aber ich dachte mir das könnte man sicher doch auch für Wände gebrauchen
und diese spalte dann neu zu Definieren in dem sinne das der Tracking code als erstes
genommen wird damit er erkennt okay ich werde angesprochen aber im nächsten Moment direct der zweite befehl ausgelöst wird wo noch mal abgefragt wird wo der Kollidiert also welche Seite genau
Sprich wenn Bild A auf Bild B Trift
soll dann der nächste code abgefragt werden dieser lauten soll
Wenn A auf bild B Rechte seite zb Trift Soll A stoppen oder zumindest sich nicht mehr bewegen können (Wie eine art mauer eben)
Hoffe man kann es soweit verstehen was ich meine :'D

In wie fern Skippen ? :?
das verstehe ich noch nicht so ganz ^^"
bin leider sehr leicht zu verwirren °^°
Wenn du exaktere Kolisionspunkte haben willst, solltest du es machen wie es jeder macht:

Große Objekte in kleinere Kolisionsobjekte zerlegen. Das heißt aus einem großen Rechteck werden dann halt 9 kleine Kolisionsrechtecke o.ä.

Oder wenn du es extrem genau haben willst berechnest du die überlappenden Pixel. Also wirklich pixelweise. Am besten eignen sich zwei Hashmap dafür, die dann gemerged werden bzw. verglichen. Aber das kostet wirklich enorm viel Zeit und so genau braucht man es eigentlich nur bei Simulationen.

Das heißt ein großes Objekt in kleinere Kolisionsobjekte zu zerlegen ist wohl die einfachste und gleichzeitig effizienteste Methode, die mir bekannt ist. Das ist wirklich kein Hexenwerk.

Edit:
Wenn alle deine Objekte einfache geometrische Formen haben, kannst du natürlich auch direkt den eintreffenden Winkel berechnen, ist nur bisschen Vektor und Trigonometrie-Funktionen rumschubsen. Winkel lässt sich relativ einfach berechnen, indem du die zwei Mittelpunkte der Rechtecke miteinander verbindest und dann den Winkel zwischen Ebene und dieser entstehenden Strecke berechnest.

Siehe auch hier für Details:
Shadow992 is offline  
Thanks
1 User
Old 01/08/2018, 04:28   #12
 
elite*gold: 0
Join Date: Jan 2013
Posts: 131
Received Thanks: 11
Quote:
Wenn alle deine Objekte einfache geometrische Formen haben, kannst du natürlich auch direkt den eintreffenden Winkel berechnen.

Große Objekte in kleinere Kolisionsobjekte zerlegen. Das heißt aus einem großen Rechteck werden dann halt 9 kleine Kolisionsrechtecke o.ä.
Wird Wohl darauf hinaus laufen müssen
ProDielerNR(1) is offline  
Old 01/09/2018, 06:18   #13
 
elite*gold: 0
Join Date: Jan 2013
Posts: 131
Received Thanks: 11
Code:
If (Picbox1.Bounds.IntersectsWith(Picbox2.Bounds)) Then
Picbox1.Location = New Point(Picbox1.Location.X, 279)
End If
Nach etwas Fummel arbeit habe ich meine Lösung gefunden
und in die Steuerung selbst mit eingebaut
Funktioniert super

Closed Quest
ProDielerNR(1) is offline  
Reply


Similar Threads Similar Threads
[S] JSF programmierung mit vorhanden Backend Programmierung
01/19/2016 - Coders Trading - 0 Replies
Hallo, suche jemanden der mir was ganz leichtes per JSF programmiert. Ich habe eine Java Anwendung programmiert die Einträge via JPA in die DB speichert. Jetzt bräuchte ich eine JSF Anwendung welche mir die Einträge zb: Angestellter X verkauft an Käufer Y das Auto Z um 5000€.
[B]Web-Programmierung, App-Programmierung
01/10/2015 - Coders Trading - 14 Replies
Hallo epvp Freunde, Ich erstelle ein professionelles Webdesign mit modernster Technik nach deinen Vorgaben und zu fairen Preisen. Aktualisiere deine neue Webseite selbst, änder vorhandene Seiten oder ergänze Texte und Bilder. Jederzeit - wann und wo du willst. Meine Kenntnisse: Webdesign Web-Programmierung (€ 35/Stunde)
Unsichbare Mauer >.<
10/04/2008 - Flyff Private Server - 19 Replies
Also ich hab vor nen neuen Kontinent zu machen. Soweit so gut aber mich nerfen diese schei* unsichtbaren Mauern die zwischen den derzeitigen Kontinenten und den Unknow Kontinente sind. Weiß jmd vllt wie man die wegbekommt ?? wäre sehr dankbar dafür.
In die Mauer "stealthen"
01/23/2006 - General Gaming Discussion - 8 Replies
Ich habs mal exploit genannt weil nix anderes gepasst hat. Nicht wirklich ein sinnvoller Exploit und ob er noch so funzt weis ich nicht (kanns nicht testen, kein char mehr der nen Stealthtool usen kann und droner ist) Aber: Man nehme einen Char der ein Stealthtool usen kann (vorzugsweise Droner) und mache sich unsichtbar. Nun kann (konnte...?) man in der Military Base am eingang in die Mauern laufen und von dort aus dronen starten. (Man müsste auch Cannons usen können, weis aber...
Silithus - Weg über die Mauer
05/24/2005 - World of Warcraft - 1 Replies
Hallöchen elitepvpers :) Ich suche derzeit auf dem Testrealm den Weg nach Ahn Quiraj der Instanz in Silithus. Jemand hatte mal im offiziellen Forum den Weg über die Mauer gepostet, nur war der Thread ganz schnell weg, wie auch zu erwarten war..... Hätte jemand von euch vieleicht den Weg oder vieleicht von welcher Seite man auf die Berge muss? Schonmal Danke :)



All times are GMT +1. The time now is 13:37.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.