Beweglichen Button nicht durch Picturebox lassen
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 55 Antworten in diesem Thema. Der letzte Beitrag () ist von TheoTechnic.
-
-
Hallo Button1_Click,
wie genau hat
Ich hab es schon mit "bounds.intersectswith" versucht , was aber nicht geklappt hat .
es nicht funktioniert ?
Gruss
mikeb69 -
-
-
Button1_click schrieb:
@mike69
If Button1.bounds.intersectswith(Picturebox1.bounds)
@singu
Meine Frage ist ja wie ich das machen soll ??
schau dir mal location an....
lg Gugi -
-
-
Ich möchte einen festen Gegenstand haben durch den man nicht durchgehen kann und auf dem die Figur stehen kann
Irgendwie bekomm ich das aber nicht hin
Ich habs so versucht:
wenn der spieler den gegenstand berührt wird der Spieler einen pixel weggesetzt in die andere Richtung
wenn ich das aber so mache ist es total ruckelig und wenn man trotzdem die taste gedrückt hält
kann man trotzdem durch den Gegenstand laufen.
Es muss eine andere Lösung geben... -
Ob sich zwei Konturen überschneiden ist eigentlich einfach zu prüfen. S.o. etc. Wenn's bei dir nicht klappt, ist der rest des Codes falsch. Und im Zweifel macht man das ganze halt nicht mit CONTROLS!
Aber!
Zu prüfen ob ein sich bewegender Gegenstand mit einem festen kollidiert ist nicht ganz so einfach! Nimm an, ein Quadrat bewegt sich pro "Tick" (Zeiteinheit, Frame, ...) eine Strecke, die 4-5 mal seiner Größe entspricht. Das feste Hindernis ist ein dünne Wand. Bei Tick "n" steht das quadrat VOR der Wand, beim Tick "n+1" dahinter! Es hat einer keiner festen position eine Kollision gegeben, aber trotzdem ist klar, dass es eine gegebene HÄTTE!
Also muss man im Prinzip die gesamte überfahrene Fläche (bei einem Quadrat dürfte das maximal ein Hexagon sein, oder?) prüfen, ob sie mit dem "Hindernis" kollidiert. Wenn ja, "wann" und halt die neue Position VOR der Wand berechnen. -
-
Also muss man im Prinzip die gesamte überfahrene Fläche (bei einem Quadrat dürfte das maximal ein Hexagon sein, oder?) prüfen, ob sie mit dem "Hindernis" kollidiert. Wenn ja, "wann" und halt die neue Position VOR der Wand berechnen.
Edit:@singu: hast du die eigentliche Komplexität denn begriffen, welche picoflop hier erkannt und gepostet hat?!Ich wollte auch mal ne total überflüssige Signatur:
---Leer--- -
jvbsl schrieb:
Wie kommst du auf Hexagon?
Ohne Rotation. entweder ein Rechteck, oder ein Hexagon. Stell die ein auf der Spitze stehendes Qaudrat vor und bewege es horizontal -> Hexagon. Ein Quadrat, dass sich genau in der Verlängerung einer seiner Seiten bewegt, ergibt ein Rechteck als überfahrene Fläche. -
Button1_click schrieb:
wenn der spieler den gegenstand berührt wird der Spieler einen pixel weggesetzt in die andere Richtung
wenn ich das aber so mache ist es total ruckelig und wenn man trotzdem die taste gedrückt hält
1. Nächste Position errechnen und auf Kollision prüfen
2. Je nach Ergebnis die bewegung ausführen oder nicht.
Und eben die Sonderfälle der Kollision beachten, die picoflop schon gepostet hat. da gibs auch so lustige Tunneleffekte bei diagonalen Bewegungen, wenn die Ecken der beiden Objekte nur kurz kollidieren.Seit 26.Mai 2012 Oppa! -
Hallo, Ich habe Alles gemacht, was ihr wolltet, und bei mir kann man mit intersect von rechts durch die picbox
Code:
VB.NET-Quellcode
- Public Class Form1
- Dim previ_key As New Keys
- Dim beschl As Integer = 1
- Private Sub Key_Press(ByVal sender As System.Object, ByVal e As KeyEventArgs) Handles Button1.KeyDown
- If previ_key = e.KeyValue Then
- beschl += 1
- Else
- beschl = 1
- End If
- Dim rect_button As New Rectangle(Button1.Location, Button1.Size)
- Dim rect_picBox As New Rectangle(PictureBox1.Location, PictureBox1.Size)
- Dim rect_b_soon As New Rectangle(New Point(Button1.Location.X + beschl, Button1.Location.Y), Button1.Size)
- If e.KeyValue = Keys.D Then
- If rect_b_soon.IntersectsWith(rect_picBox) Then
- Return
- Else
- Button1.Location = New Point(Button1.Location.X + beschl, Button1.Location.Y)
- End If
- ElseIf e.KeyValue = Keys.A Then
- If rect_b_soon.IntersectsWith(rect_picBox) Then
- Return
- Else
- Button1.Location = New Point(Button1.Location.X - beschl, Button1.Location.Y)
- End If
- ElseIf e.KeyValue = Keys.W Then
- If rect_b_soon.IntersectsWith(rect_picBox) Then
- Return
- Else
- Button1.Location = New Point(Button1.Location.X, Button1.Location.Y - beschl)
- End If
- ElseIf e.KeyValue = Keys.S Then
- If rect_b_soon.IntersectsWith(rect_picBox) Then
- Return
- Else
- Button1.Location = New Point(Button1.Location.X, Button1.Location.Y + beschl)
- End If
- End If
- previ_key = e.KeyValue
- End Sub
- Private Sub Key_Up(ByVal sender As System.Object, ByVal e As KeyEventArgs) Handles Button1.KeyUp
- beschl = 1
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Button1.Location = New Point(156, 188)
- End Sub
- End Class
(im Anhang die .exe dazu)
warum kann ich von hinten durch die picbox durch?
Valerian -
-
-
-
Ah, kapiere:
Dim rect_b_soon As New Rectangle(New Point(Button1.Location.X + beschl, Button1.Location.Y), Button1.Size)
auch mit
Dim rect_b_soon As New Rectangle(New Point(Button1.Location.X (!) - (!) beschl, Button1.Location.Y), Button1.Size)
Dim rect_b_soon As New Rectangle(New Point(Button1.Location.Xl, Button1.Location.Y + beschl), Button1.Size)
Dim rect_b_soon As New Rectangle(New Point(Button1.Location.Xl, Button1.Location.Y - beschl), Button1.Size)
-
-
aber prinzipiell brauche ich dann trotzdem 2 rechtecke (x und y achse)
und ähm... macht man dann mit SSEEHHRR vielen rechtecken (Landschaft) lieber eine matrix?
also ich sowas wie das hier machen:
N-Game
Macht man bei sowas eine matrix oder auch mit rectangle?
-
Tags
-
Ähnliche Themen
-
lustlosz - - Sonstige Problemstellungen
-
El3ctro - - Sonstige Problemstellungen