Önceki başlık :: Sonraki başlık |
Yazar |
Mesaj |
keremakgul
Kayıt: Jul 05, 2005 Mesajlar: 58
|
Tarih: Fri Aug 26, 2005 8:18 pm Mesaj konusu: Vbde Masa Tenisi (yardım) |
|
|
Selam arkadaşlar ben basit bir visual basicte tenis oyunu yapıyorum. Dışarı çıkınca topun yönünü değiştirmesini istiyorum şu şekilde kod yazdım ama olmadı :
asagi sol timeri:
Kod: |
Private Sub asagisol_Timer()
Label1.Top = Label1.Top + 5
Label1.Left = Label1.Left - 5
End Sub |
sol yukari timeri:
Kod: |
Private Sub solyukari_Timer()
If (Label1.Top >= 0 And Label1.Top <= 100) And (Label1.Left >= 0 And Label1.Left <= 360) Then
solyukari.Enabled = False
asagisol.Enabled = True
End If
Label1.Top = Label1.Top - 7
Label1.Left = Label1.Left - 5
End Sub |
Burda label1 oyundaki top ama neden label1 istediğim koordinatlara gelince yönünü değiştirmiyor yardımlarınızı bekliyorum... |
|
Başa dön |
|
|
TheCotanak
Kayıt: Sep 03, 2003 Mesajlar: 921 Nereden: Istanbul
|
Tarih: Sat Aug 27, 2005 2:42 am Mesaj konusu: |
|
|
Selam..
Ilk olarak formda bos alanda yapmaktan daha kolayi var. Her kenarı line koyarak belirle.. alt çizgi, yan çizgi falan.. dikdörgen içinde dolaşsın top yani.. sonra topun ilk alt tabana değip sekeceğini düşünecek olursak ki sen öyle yapmak istemişsin:
Kod: |
Private Sub asagisol_Timer()
Label1.Top = Label1.Top + 5
Label1.Left = Label1.Left - 5
If Label1.Top = alt_cizgi.Y1 - 255 Then
solyukari.Enabled = True
asagisol.Enabled = False
End If
End Sub
|
Bunu asagisol_timer'a uygularsan ne demek istedigimi anlayacaksın..
Bu arada "alt_cizgi.y1 - 255" kısmında, benim label topumun heighti 255 idi.. o yuzden 255 dedim.. sen seninkine göre ayarla..
Bunu yaptıktan sonra diğer kenarları da yaparsın zaten.
Kolay gelsin. |
|
Başa dön |
|
|
TheCotanak
Kayıt: Sep 03, 2003 Mesajlar: 921 Nereden: Istanbul
|
|
Başa dön |
|
|
BuroX
Kayıt: Jun 07, 2005 Mesajlar: 65 Nereden: Hancan Games'ten
|
Tarih: Sat Aug 27, 2005 1:15 pm Mesaj konusu: |
|
|
Ben de collision detection yapamıyorum. Kodlara bir bakın nereyi yanlış yaptım?
Kod: |
Option Explicit
Dim fps, puan, adamsol, kutusol As Long
Dim can As Integer
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyRight Then
Timer1.Enabled = True
Timer2.Enabled = False
End If
If KeyCode = vbKeyLeft Then
Timer2.Enabled = True
Timer1.Enabled = False
End If
End Sub
Private Sub Form_Load()
adam.FileName = "C:\Program Files\Game_Maker6\Sprites\morphosis_figures\johnny.gif"
can = 3
puan = 0
End Sub
Private Sub Timer1_Timer()
adam.FileName = "C:\Program Files\Game_Maker6\Sprites\morphosis_figures\johnny.gif"
adamsol = adamsol + 100
End Sub
Private Sub Timer2_Timer()
adam.FileName = "C:\Program Files\Game_Maker6\Sprites\morphosis_figures\johnny_ters.gif"
adamsol = adamsol - 100
End Sub
Private Sub Timer3_Timer()
fpsyazi.Caption = "FPS: " & fps
fps = 0
End Sub
Private Sub Timer4_Timer()
adam.Left = adamsol
kutusol = Image2.Left
fps = fps + 1
canyazi.Caption = "Can: " & can
puanyazi.Caption = "Puan: " & puan
If adamsol = kutusol Then
Timer2.Enabled = True
Timer1.Enabled = False
End If
End Sub
|
|
|
Başa dön |
|
|
levent
Kayıt: Mar 13, 2003 Mesajlar: 188 Nereden: İstanbul
|
Tarih: Sat Aug 27, 2005 1:40 pm Mesaj konusu: |
|
|
öncelikle o kadar çok timer kullanmaya gerek yok oyunda 1 tane timer (aslında ona da gerek yok, tercihen do-loop döngüsü daha iyi olur) yeterli.
Aşağıdaki kod iki objenin collide edip etmediğini test eder. bunlar custom objectler olduğu için x,y,w,h özelliklerine sahip. eğer bunları diyelim ki imageboxlarla değiştirmek istiyorsanız x,y,w,h özelliklerini sırasıyla left,top,width,height ile değiştirmenizi gerekir.yani obj1.x yerine obj1.left demelisiniz.
Kod: |
Public Function Collid(obj1 As gObj, obj2 As gObj) As Boolean
If ((obj1.X + obj1.W) > obj2.X) And (obj1.X < (obj2.X + obj2.W)) Then
If ((obj1.Y + obj1.H) > obj2.Y) And (obj1.Y < (obj2.Y + obj2.H)) Then
Collid = True
Else
Collid = False
End If
Else
Collid = False
End If
End Function
|
Collid(image1,image2)=true dönüyorsa image1 ve image2 birbirine dokunuyor (ya da içiçe geçmiş) demektir. |
|
Başa dön |
|
|
BuroX
Kayıt: Jun 07, 2005 Mesajlar: 65 Nereden: Hancan Games'ten
|
Tarih: Sat Aug 27, 2005 3:43 pm Mesaj konusu: |
|
|
Çok teşekkürler.
Yalnız 3-4 tane timer kullanmaktan başka çarem yok, çünkü hepsi aynı anda çalışmak zorunda ve intervalları farklı. |
|
Başa dön |
|
|
wisecode_g
Kayıt: Jul 29, 2005 Mesajlar: 17 Nereden: istanbul
|
Tarih: Tue Oct 04, 2005 3:49 pm Mesaj konusu: |
|
|
belli sınırlar koyduktan sonra mesela top image1 olsun..
timer içinde kontrol yapacaz şöyle..
dim sagsol,yukasa,hiz,altsinir,yansinir As Integer
altsinir=5000;
yansinir=4000;
hiz=50 ' bu topun hareket hızı
sagsol = hiz;
yukasa = hiz;
Private Sub Timer1_Timer()
if (image1.left >= yansinir-image1.width) OR (image1.left <= 0)then 'image1 in genişliğini hesaba katıyoruz.
sagsol = -sagsol
end if
if (image1.top >= altsinir-image1.height) OR (image1.top <= 0 ) then
yukasa=-yukasa
end if
End Sub
labta yazıyom derse yetişmem lazım hızlı yazdım bi sorun varsa söyleyin ama mantık doğru sanırım..
|
|
Başa dön |
|
|
Fraud
Kayıt: Oct 29, 2004 Mesajlar: 42 Nereden: Istanbul
|
Tarih: Fri Oct 07, 2005 1:59 am Mesaj konusu: |
|
|
wisecode_g demiş ki: |
belli sınırlar koyduktan sonra mesela top image1 olsun..
timer içinde kontrol yapacaz şöyle..
dim sagsol,yukasa,hiz,altsinir,yansinir As Integer
altsinir=5000;
yansinir=4000;
hiz=50 ' bu topun hareket hızı
sagsol = hiz;
yukasa = hiz;
Private Sub Timer1_Timer()
if (image1.left >= yansinir-image1.width) OR (image1.left <= 0)then 'image1 in genişliğini hesaba katıyoruz.
sagsol = -sagsol
end if
if (image1.top >= altsinir-image1.height) OR (image1.top <= 0 ) then
yukasa=-yukasa
end if
End Sub
labta yazıyom derse yetişmem lazım hızlı yazdım bi sorun varsa söyleyin ama mantık doğru sanırım..
|
Farkettiğim tek sorun bazı satırların sonundaki. ";" Kafa C'deydi sanırım. |
|
Başa dön |
|
|
wisecode_g
Kayıt: Jul 29, 2005 Mesajlar: 17 Nereden: istanbul
|
Tarih: Fri Oct 07, 2005 11:03 am Mesaj konusu: |
|
|
valla öyleymiş şimdi gördüm |
|
Başa dön |
|
|
|