Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


kolliderings fråga

Postades av 2002-06-27 19:16:12 - Björn Johansson, i forum visual basic - allmänt, Tråden har 16 Kommentarer och lästs av 591 personer

Hej...jag har suttit hela dagen idag med denna function:

Function leftallowed() As Boolean

Dim i As Integer
For i = 0 To Label1.Count - 1
If Label2.Left <= Label1(i).Left + Label1(i).Width Then
If Label2.Top < Label1(i).Top + Label1(i).Height And Label2.Top > Label1(i).Top Then
leftallowed = False
Exit Function
End If
End If
Next i
leftallowed = True

End Function


ops glömde...så här kollar jag koden:

Select Case KeyCode
Case vbKeyLeft
If leftallowed = False Then Exit Sub
Label2.Left = Label2.Left - 50
end select


label2 ska krocka med label1 som ligger i en array..därav for-loopen....
Krocken fungerar nästan...ibland stoppas label2 ibland inte...det är olika labels varje gång....alltså...första gången kanske label1(2) stoppas det..nästa gång kan jag gå igenom...

jag har frågat på chatten men dom ser inte felet....=(

/bj


Svara

Sv: kolliderings fråga

Postades av 2002-06-27 19:21:37 - Pelle Johansson

Den här typen av frågor är ganska svåra att svara på. Det bästa du kan göra är att lägga ut 4 labels och hela tiden visa dess värden. Sedan när du kör programmet så ser du vad som händer. Värdet på någon av dess positioner kan förändras på ett sätt som du inte tänkt på.

En annan varian är att använda debug.print rätt frekvent och på så sätt hela tiden följa de värden som finns.

Hälsningar
/Pelle


Svara

Sv: kolliderings fråga

Postades av 2002-06-27 19:55:31 - Björn Johansson

jag använder debug print där jag skriver ut label2 left och top...
men bara genom att veta left och top gör ju mig smartare eller?
eftersom label1(i) hela tiden är på samma plats..och jag kolalr ju om label2 left och top är samma som tex label1(i).left osv...
det ska ju stoppas....


nu kollar jag även i debug.print leftallowed...och det blir ju bara true eller false...ibland blev det false även om det inte var något där.....

/bj - blir tokig


Svara

Sv: kolliderings fråga

Postades av 2002-06-27 20:35:23 - Fredrik Molnar

Dim i As Integer
For i = 0 To Label1.Count - 1
If (Label2.Left <= Label1(i).Left + Label1(i).Width And Label2.Left >= Label1(i).Left) Or (Label2.Left + Label2.Width <= Label1(i).Left + Label1(i).Width And Label2.Left + Label2.Width >= Label1(i).Left) Then
If (Label2.Top >= Label1(i).Top And Label2.Top <= Label1(i).Top + Label1(i).Height) Or (Label2.Top + Label2.Height >= Label1(i).Top And Label2.Top + Label2.Height <= Label1(i).Top + Label1(i).Height) Then

leftallowed = False
Exit Function
End If
End If
Next i
leftallowed = True

End Function


Svara

Sv: kolliderings fråga

Postades av 2002-06-27 20:38:31 - David Emilsson

den här if-satsen använde jag i en loop till ett snakespel. byt ut 'S(1)' mot 'Label2' och 'S(i)' mot 'Label(i)' och testa om den funkar för dig också.


If S(1).Left + S(1).Width > S(i).Left And S(1).Left + S(1).Width < S(i).Left + S(i).Width And _
S(1).Top + S(1).Height > S(i).Top And S(1).Top + S(1).Height < S(i).Top + S(i).Height Or _
S(1).Left > S(i).Left And S(1).Left < S(i).Left + S(i).Width And _
S(1).Top + S(1).Height > S(i).Top And S(1).Top + S(1).Height < S(i).Top + S(i).Height Or _
S(1).Left = S(i).Left And S(1).Top = S(i).Top Then


jag kom inte ihåg att den var såhär lång... men den funkar har jag för mig.


Svara

Sv: kolliderings fråga

Postades av 2002-06-27 21:08:18 - Björn Johansson

>banarne: tack för dig kod men den hjälpte inte....men buddas kod funkade....

tack för att ni tog er tid med mitt problem...=)

nu ska jag bara göra up,right och down också... =D
men det löser jag nog själv..=)


/bj


Svara

Sv: kolliderings fråga

Postades av 2002-06-29 12:38:17 - Fredrik Molnar

Det är rätt bj, man lär sig inte om man inte gör det själv. Hoppas att mitt svar leder dig på rätt väg! Kanske man om några år kommer att köpa spel från bj-soft eller något sånt :-D !


Svara

Sv: kolliderings fråga

Postades av 2002-06-29 13:15:10 - Björn Johansson

hehe..=)

det blev en bugg när man har rightallowed också....buggen är att om man går på mot vänster och nuddar label1(i) då kan man inte backa...samma sak med höger...men det löser jag nog....

/bj


Svara

Sv: kolliderings fråga

Postades av 2002-06-30 17:17:42 - Andreas Hillqvist

Jag skulle föreslå en annan jämförelse. Det kräver mindre jämförelser att se om den inte krockar. Uppfylls inga av dessa så krockar det. En funktion som kapslar if-satsen:
<code>
Function Collision(NewLeft As Single, NewTop As Single, NewWidth As Single, NewHeight As Single) As Boolean
Dim Label As Label
For Each Label In Label1
If Label.Left + Label.Width < NewLeft Then
ElseIf Label.Left > NewLeft + NewWidth Then
ElseIf Label.Top + Label.Height < NewTop Then
ElseIf Label.Top > NewTop + NewHeight Then
Else
Collision = True
Exit Function
End If
Next
End Function
</code>
Har dessutom skickat upp ett utförligt exempel på hur man kan implementera det i filarean:
Programarkivet:Kollisionsdetecteringa mellan rectanglar


Svara

Sv: kolliderings fråga

Postades av 2002-06-30 21:40:17 - Fredrik Molnar

Bra skrivet Andreas! Kunde inte gjort det bättre själv (uppenbarligen!).

Satt och tänkte på BJs problem och lösningen var ju att kollas om slutdestination kolliderade, inte om startpositionen kolliderade.


/Budda


Svara

Sv: kolliderings fråga

Postades av 2002-06-30 23:30:23 - Andreas Hillqvist

Tack för komplimangen. Tror inte det är nån unik idé. Tack vare erfarenhet som jag lärt mig upptäckte jag det själv.

Jag satt och ritade upp på ett papper vilka olika fall som kunde gälla för att kontrollera om en bokning överlappade ett annan.

Såg då at bara två fall som den inte överlappade. Om slutvärdet för perod1 var mindre än startvärdet för period2 eller om period1 startvärde var större än slutvärdet för period2.

Det krävde alltså mindre jämförelser att kontrollera om de inte kolliderade än om det gjorde det.

Men samma princip går att tillämpa. i detta fallet, fast för två dimensioner. I exemplet har jga gjort det möjligt att flytta objektet i två dimensioner samtidigt(diagonalt). Om det finns ett hinder kan man fortsätta flytta det i den andra dimensionen om den är obehindrad.


Svara

Sv: kolliderings fråga

Postades av 2002-07-01 00:13:53 - Sven Åke Persson

Hej bj
Du har snurrat runt med dina kollideringsfrågor nu snart
ett halvår, snart kolliderar du med dig själv.

Sven


Svara

Sv: kolliderings fråga

Postades av 2002-07-01 19:41:44 - Andreas Hillqvist

Du får väl hjälpa mig då.


Svara

Sv: kolliderings fråga

Postades av 2002-07-01 19:46:23 - Björn Johansson

svenpon: jaha och? ett problem är till för att lösas..spela roll vilken tid det tar...tror jag lagt in 2frågor om detta....annars har jag försökt själv...jag fick en kod av trash men som nu är borta...=(

/bj


Svara

Sv: kolliderings fråga

Postades av 2002-07-01 20:18:23 - Sven Åke Persson

Hej
Ja det är jätte struligt, har inte följt alla vinklingar.
men det måste bli en massa if eller case satser.

Phuuuuuuuuuuu. orkar inte
Har du kollat hur game konstruktörerna gör.

DS


Svara

Sv: kolliderings fråga

Postades av 2002-07-01 20:22:27 - Björn Johansson

>Har du kollat hur game konstruktörerna gör.

nope jag har knappt letat efter koder på internet...tänkte få till det själv med lite hjälp från pellesoft.nu

ett annat problem jag jobbar med då och då är bitblt som jag också ska lösa själv!!

/bj


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 154
27 952
271 704
422
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies