| Ö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 |  | 
	
		|  | 
	
		|  |