Poslao: 31 Mar 2009 23:25
|
offline
- petkochb
- Novi MyCity građanin
- Pridružio: 26 Avg 2007
- Poruke: 13
|
Izvinjavam se unapred ako ova tema postoji. pretrazio sam sve zive forume i nisam mogao da nadjem odgovor. Zapravo o cemu se radi:
napravio sam prostu igricu gde se dva shape-a krecu po formi klikom na odredjene dugmice (predstavljaju 2 tenka). Njihovo kretanje sam resio Timer kontrolom, medjutim, na mom racunaru se oni sporije krecu nego kod komsije, sto me cudi jer on ima slabiji racunar (ako je do toga?).
To ovako izgleda:
Private Sub gore_Timer()
Shape1.Top = Val(Shape1.Top) - 50
End Sub
Private Sub dole_Timer()
Shape1.Top = Val(Shape1.Top) + 50
End Sub
Private Sub levo_Timer()
Shape1.Left = Val(Shape1.Left) - 50
End Sub
Private Sub desno_Timer()
Shape1.Left = Val(Shape1.Left) + 50
End Sub
Interval svih Timera je 20 (nije 20s). Molim Vas pomozite mi kako da resim tu razliku u brzini.
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 31 Mar 2009 23:38
|
offline
- bobby
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Timer komponenta nije precizna.
Pride toga, moze postojati problem i sa FOR..NEXT petljama. Dok se petlja izvrsava moze doci do totalnog zauzeca threada, pa tajmer za to vreme bude blokiran.
Za vecinu programskih jezika postoje posebne komponente tipa sa preciznijim tajmerima. Vidi da li postoji neka takva i za VB.
|
|
|
|
Poslao: 01 Apr 2009 02:01
|
offline
- Srki_82
- Moderator foruma
- Srđan Tot
- Am I evil? I am man, yes I am.
- Pridružio: 12 Jul 2005
- Poruke: 2483
- Gde živiš: Ljubljana
|
Nista te ne sprecava da napravis time based kretanje. Kad god aplikacija nema nista drugo da radi (obrada ulaznih podataka, logika igre, crtanje...) ti izracunas koliko je vremena proslo od poslednjeg "besposlenog" stanja i pomeris objekte u manje ili vise u zavisnosti od proteklog vremena.
|
|
|
|
Poslao: 01 Apr 2009 12:11
|
offline
- petkochb
- Novi MyCity građanin
- Pridružio: 26 Avg 2007
- Poruke: 13
|
Da li moze neko pojasnjenje za to time based kretanje. Meni je bitno da se ta dva objekta (shape1 & shape2) krecu uvek istom brzinom, tj. da njihovo kretanje ne zavisi od racunara vec da se na svakom racunaru krecu istom brzinom.
|
|
|
|
Poslao: 01 Apr 2009 13:57
|
offline
- karlos
- Građanin
- Pridružio: 25 Maj 2007
- Poruke: 114
- Gde živiš: Novi Sad, Sombor
|
Mislim da ti ne treba toliko Timer-a.
Evo primer kako mozes resiti, slicno kao sto je rakao Srki. Bez obzira na interval Timer1 kretace se uvek istom brzinom, samo ce se menjati ucestalost iscrtavanja. Ako intervala i Timer-u na 20 ms imaces 50 iscrtavanja u sekundi.
Dim Levo1 As Boolean
Dim Desno1 As Boolean
Dim Gore1 As Boolean
Dim Dole1 As Boolean
Dim Levo2 As Boolean
Dim Desno2 As Boolean
Dim Gore2 As Boolean
Dim Dole2 As Boolean
Dim x1 As Integer
Dim x2 As Integer
Dim y1 As Integer
Dim y2 As Integer
Dim Vreme As Double
Dim Razlika As Integer
Dim Brzina As Integer
Private Sub Form_Load()
Desno1 = True
Dole2 = True
Vreme = Timer
x1 = 1000
x2 = 2000
y1 = 200
y2 = 300
Brzina = 100
End Sub
Private Sub Timer1_Timer()
Razlika = (Timer - Vreme) * Brzina
If Levo1 = True Then x1 = x1 - Razlika
If Levo2 = True Then x2 = x2 - Razlika
If Desno1 = True Then x1 = x1 + Razlika
If Desno2 = True Then x2 = x2 + Razlika
If Gore1 = True Then y1 = y1 - Razlika
If Gore2 = True Then y2 = y2 - Razlika
If Dole1 = True Then y1 = y1 + Razlika
If Dole2 = True Then y2 = y2 + Razlika
Shape1.Top = y1
Shape2.Top = y2
Shape1.Left = x1
Shape2.Left = x2
Vreme = Timer
End Sub
U VB postoje i precizniji tajmeri od fu-je Timer koja ima preciznost na dve decimale (barem kod mene) ali je u ove svrhe, sasvim dovoljna.
|
|
|
|
Poslao: 04 Apr 2009 23:29
|
offline
- petkochb
- Novi MyCity građanin
- Pridružio: 26 Avg 2007
- Poruke: 13
|
Karlose hvala ti puno na ovoj pomoci. Mislim da je ovo reseno. Proveravao sam sa komsijom i mislim da u istom trenutku dolaze do cilja(kako na njegovom tako i na mom racunaru).Jos jednom hvala puno na pomoci.
|
|
|
|