Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
Sayfa: [1] 2   Aşağı git
Yazdır
Gönderen Konu: Hareketli sprite efekti  (Okunma Sayısı 14043 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« : Kasım 19, 2014, 21:58:43 ÖS »

Geçenlerde wizfwor'un paylaştığı hareketli rasterbar ları görünce, aklıma klasik bir intro efekti olan, zıplayan sprite topları geldi (Tuhaf bir ifade oldu ). Aklıma gelmişken, bununla ilgili bir tutorial hazırlayayım dedim.

Amacım spriteları detaylı anlatmak değil. Bununla ilgili zamanında Hadesin çıkarttığı c64türkiye dergisinin 6ncı sayısında, detaylı bilgi bulabilirsiniz.

Aslında c64 assembler'a ilgi duyuyor ve nereden başlasam diyorsanız,

Hadesin c64türkiye dergileri çok iyi bir başlangıç olacaktır.

http://www.retrodergi.com/list.php?

Ayrıca nightlord'un assembler kursları da bu konuda oldukça ilerlemenizi sağlayacaktır.

http://nightnetwork.org/?page_id=4

İlk önce, eğer notepad ile yazıp acme ile derleyeceksek(Bununla ilgili daha önce yazdığım yazılarda detaylı bilgiler bulablirsiniz), boş bir notepad dosyası oluşturup, adını sprite_animasyon,  uzantısınıda diğer dosyalarla karıştırmamak için .a veya .asm yapıyorum. Ben genelde .a yazıyorum.

Dosyamızı oluşturup, ilk satırlarımızı yazıyoruz.

Programımızı derlediğimizde oluşacak çıktının ismini yazıyoruz.

!to"sprite_animasyon.prg",cbm

Burada ,cbm yazmamızın sebebi, acme'ye bunun bir commodore programı olduğunu bildirmek.

Programımızın otomatik olarak çalışması için satırlarmızı yazıp, ardından ekranı sildirip, ekranın iç ve dış rengini siyah yapalım.

Henüz irq kullanmadığımız için, programımızın sonuna rts yazarak, işlemciye program sonuna geldiğini bildiriyoruz.

Kod:
		* = $0801
!byte $0b, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00

*=$080d

jsr $e544

lda #$00
sta $d020
sta $d021

rts

Buraya kadar yazdıklarımız acme ile derleyip, çıktıyı kontrol

ediyoruz. Ekran görüntümüz bu şekilde oldu.

« Son Düzenleme: Kasım 20, 2014, 08:07:33 ÖÖ Gönderen: joker_ » Logged
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #1 : Kasım 19, 2014, 22:08:04 ÖS »

Evet ekranı silip, iç ve dış rengini siyah yaptık..

Sıra geldi, ekranda yukarı aşağı zıplayan, sprite toplarımızı yapmaya.

Commodore'da sprite çizimi için kullanabileceğiniz bir çok tool mevcut. Ben spritepad kullanarak çiziyorum. Aslında tam da çizemiyorum kabiliyetsizlik meselesi. Kahkaha (Bu konuda bir grafikerden destek almak en iyisi. Çünkü bir demo veya introyu, yukarı taşıyan en önemli etkenlerin başında, bana göre grafik ve müzik gelir. Kodunuz ne kadar iyi olursa olsun, grafik kötüyse yaptığınız iş çok göze batmaz.)

Spritepad'i buradan indirebilirsiniz.

http://csdb.dk/release/?id=100657

Burada spritepad içinde hazır gelen, sample'lardan birini kullanabiliriz. Tabiiki yaptığınız ürünlerde, başkasına ait bir şey kullanıyorsanız, credits vermeyi unutmayın. Sonra lamer derler, karışmam Kahkaha

Spritepad ile sprite'ımız çizdik, peki bunu nasıl dataya çevirip, programımızda kullanacağız? Cevabı yine spritepad'in içinde.

Tools/View Text Data../Decimal veya Hex olarak bize çıktı veriyor.

İstediğiniz çıktıyı kullanabilirsiniz. Ben decimal olarak alıyorum
çıktıyı..

Spritepad bize aşağdaki gibi 64 ad sprite datasını üretti.

0,255,0,3,255,192,15,255,240,31,255,248,63,255,252,63,255,252,127,255,
254,127,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,25
5,255,127,255,254,127,255,254,63,255,252,63,255,252,31,255,248,15,255,
240,3,255,192,0,255,0,11

Şimdi bu datayı programımızın içinde kullanabiliriz. Tabii derleme sırasında, acme'nin bunun byte olduğunu anlaması için başına !byte yazacağız.

Programımıza geri dönelim..

Ne yapmıştık, ekranı silip, iç ve dış rengi siyah yaptık.

Şimdi spritelarımızı ekleme zamanı geldi.

irq rutine girmeden önce, sprite ayarlarımızı yapıyoruz.

      lda #$ff
      sta $d015 -- > tüm sprite'ları açtık.

Sprite'ımızı hafızada $3000 adresine koyacağız. Bunuda $3000/$40 yaparak $c0 olarak sprite adreslerine yazıyoruz.

      ldx #$00
      lda #$c0
-      sta $07f8,x

      inx
      cpx #$07
      bne -

Renklerimizi verelim.

      ldx #$00
      lda #$0f      
-      sta $d027,x
      
      inx
      cpx #$07
      bne -
      
Sprite'larımızı artık ekrana dizebiliriz.
Spriteları x ekseninde diziyoruz.

      ldx #$00
      lda #$3a
-      sta $d000,x

      clc
      adc #$20
      
      inx
      inx
      cpx #16
      bne -

Yukarıdaki rutinin açık hali aşağıdadır.

      lda #$3a
      sta $d000
      clc
      adc #$20
      sta $d002
      clc
      adc #$20
      sta $d004
      clc
      adc #$20
      sta $d006
      clc
      adc #$20
      sta $d008
      clc
      adc #$20
      sta $d00a
      clc
      adc #$20
      sta $d00c
      clc
      adc #$20
      sta $d00e

Şimdide y eksen bilgilerini yazalım.

      ldx #$00
      lda #$a0
-      sta $d001,x

      inx
      inx
      cpx #16
      bne -         
   
Spritelarımızı hafızanın $3000 nolu adresine kayacağımızdan bahsetmiştik.

      * = $3000

      !byte 0,255,0,3,255,192,15,255,240,31
      !byte 255,248,63,255,252,63,255,252,127,255
      !byte 254,127,255,254,255,255,255,255,255,255
      !byte 255,255,255,255,255,255,255,255,255,127
      !byte 255,254,127,255,254,63,255,252,63,255
      !byte 252,31,255,248,15,255,240,3,255,192
      !byte 0,255,0,11
 
Artık çalıştırıp ekran görüntüsüne bakabiliriz.

Kod:
!to"sprite_animasyon.prg",cbm  	

* = $0801
           !byte $0b, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00

*=$080d

jsr $e544

lda #$00
sta $d020
sta $d021

lda #$ff
sta $d015 ;-- > tüm sprite'ları açtık.

ldx #$00
lda #$c0
- sta $07f8,x

inx
cpx #$08
bne -

ldx #$00
lda #$0f
- sta $d027,x

inx
cpx #$08
bne -

;x ekseninde diziyoruz

ldx #$00
lda #$3a
- sta $d000,x

clc
adc #$20

inx
inx
cpx #16
bne -

;y eksen bilgileri
ldx #$00
lda #$a0
- sta $d001,x

inx
inx
cpx #16
bne -

rts


* = $3000

!byte 0,255,0,3,255,192,15,255,240,31
!byte 255,248,63,255,252,63,255,252,127,255
!byte 254,127,255,254,255,255,255,255,255,255
!byte 255,255,255,255,255,255,255,255,255,127
!byte 255,254,127,255,254,63,255,252,63,255
!byte 252,31,255,248,15,255,240,3,255,192
!byte 0,255,0,11



« Son Düzenleme: Kasım 20, 2014, 08:06:52 ÖÖ Gönderen: joker_ » Logged
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #2 : Kasım 19, 2014, 22:12:14 ÖS »

Dikkat ettiyseniz spritelar, ekranda sola yanaşık bir vaziyette duruyorlar. Yani ekranı ortalamamışlar. Oysaki x koordinatına yazdığımız $3a değerine göre, ekranda tam olmasada, ortalarda biryerler de dizilmesi gerekiyordu. Bir yerlerde bir şeyleri eksik yaptık.

Evet haklısınız 8.nci sprite'ımız 255'i geçtiğinden, 8 nolu sprite, ekranın solunda gösteriliyor. Bunu aşmak için $d010 registerinde ilgili sprite'ın bit'ini 1 yapıyoruz.

Yani;
   $d010 #%00000000 -- > herbir bit, bir sprite'ı temsil eder.

Sağdan itibaren sayarak, 8 nolu sprite'ın ilgili bit'ini 1 yapıyoruz.
   lda #%10000000
   sta $d010

İlgili düzeltmeyi yapıp, yeniden derleyip, çalıştıralım.

Kod:
!to"sprite_animasyon.prg",cbm  	

* = $0801
     !byte $0b, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00

*=$080d

jsr $e544

lda #$00
sta $d020
sta $d021

lda #$ff
sta $d015 ;-- > tüm sprite'ları açtık.

ldx #$00
lda #$c0
- sta $07f8,x

inx
cpx #$08
bne -

ldx #$00
lda #$0f
- sta $d027,x

inx
cpx #$08
bne -

;x ekseninde diziyoruz

ldx #$00
lda #$3a
- sta $d000,x

clc
adc #$20

inx
inx
cpx #16
bne -

;y eksen bilgileri
ldx #$00
lda #$a0
- sta $d001,x

inx
inx
cpx #16
bne -

lda #%10000000
sta $d010

rts

* = $3000

!byte 0,255,0,3,255,192,15,255,240,31
!byte 255,248,63,255,252,63,255,252,127,255
!byte 254,127,255,254,255,255,255,255,255,255
!byte 255,255,255,255,255,255,255,255,255,127
!byte 255,254,127,255,254,63,255,252,63,255
!byte 252,31,255,248,15,255,240,3,255,192
!byte 0,255,0,11



Evet şimdi oldu.
Logged
emarti
Uzman
*****
Mesaj Sayısı: 2.624


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #3 : Kasım 19, 2014, 22:15:20 ÖS »

Abi devamı gelecek mi?
Logged

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB | https://c64kernal.com Genesis

READY.
SYS(64767): EMARTI
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #4 : Kasım 19, 2014, 22:21:25 ÖS »

Buraya kadar ekranımızı sildik, siyah renk verdik, sprite'larımızı ayarlayıp, ekrana dizdik. Artık spritelarımıza biraz hareket vermenin zamanı geldi. Kahkaha Kuru kuru ekran da durmasınlar dimi.

İlk yapacağımız iş, bir irq oluşturup, efekti irq içinden çağırmak.

Hemen başlayalım.

      lda #%10000000
      sta $d010

yazan yerin altına, (artık rts ile işimiz kalmadığı için, kendisine teşekkür edip siliyoruz ), interrupt rutinimizi yazabiliriz.
Kod:
		sei

lda #$7f
                sta $dc0d

                lda #$01
                sta $d01a

lda #$00
sta $dc0e

              lda #$1b
              sta $d011

lda #$10
sta $d012

lda #<irq
sta $0314
lda #>irq
    sta $0315
 
              cli
jmp *

irq oluşturup, sprite ları hareket ettirecek, rutinimizi çağırıyoruz.

irq             
inc $d019

jsr sprite_animasyon

lda #$7a
sta $d012

jmp $ea81


;============ sprite_animasyon rutini ===========
sprite_animasyon

sprite'ın yukarı ve aşağı hareketlerinin, yumaşak ve göze hoş görünmesi için, bir sinus tablosundan yararlanabiliriz. Yine bu iş için tonlarca sinus generator tool mevcut. (Meraklanmayın hepsini zip olarak ekliyicem )

sprite_sinus_tablosu

      !by 25,23,21,20,18,17,15,14,12,11,10,8,7,6,5,4
      !by 3,2,2,1,1,0,0,0,0,0,0,0,0,0,1,1
      !by 2,3,4,5,6,7,8,9,10,12,13,14,16,17,19,21
      !by 22,24,25,27,28,30,32,33,35,36,37,39,40,41,42,43
      !by 44,45,46,47,48,48,49,49,49,49,49,49,49,49,49,48
      !by 48,47,47,46,45,44,43,42,41,39,38,37,35,34,32,31
      !by 29,28,26,25
      
Bu sinüs tablosundan okuduğumuz değerleri, sprit'ımızın y koordinatına vererek, yukarı aşağı hareket etmesini sağlayacağız.

Tablodan okuyacağımız değerleri saymak ve istediğimiz değer ulaşınca başa dönmek için bir hareket sayacına ihtiyacımız olacak. Programımın sonuna, hareket_sayaci oluşturuyorum ve 0 değeri veriyorum.

hareket_sayacı
      !by 0   

Sayacımızı her seferinde 1 arttırarak, ilgili sinus tablosundan, bir değer okuyup, bu değeride sprite'ın y koordinatına yazacağız.

      lda hareket_sayacı -- > hareket sayacımızı kontrol ediyoruz.
      cmp #100 -- > sinus tablosunda 100 tane değer var.
      bne +   -- > Sayacımızın 100 olup, olmadığını kontrol ediyoruz.   
      
      lda #$00   -- > 100 olmuşsa, sayacı sıfırlıyoruz.
      sta hareket_sayacı

olmamışsa, buraya sıçrayarak sayacımızın değeri kadar, tablodan sayaç değeri kadar giderek, y koordinatına yazacağımız değeri okuyoruz.

Burayı biraz açmak gerekiyor.
Örnek hareket sayacımızın değeri 12 olsun.

      ldx hareket_sayacı   
      lda sprite_sinus_tablosu,x

burada sprite_sinus_tablosu'nun 12.nci değerini buluyoruz. (saymaya sıfırdan aşlıyoruz.)

sprite_sinus_tablosu
                         *   
      !by 25,23,21,20,18,17,15,14,12,11,10,8,7,6,5,4
      !by 3,2,2,1,1,0,0,0,0,0,0,0,0,0,1,1
      !by 2,3,4,5,6,7,8,9,10,12,13,14,16,17,19,21
      !by 22,24,25,27,28,30,32,33,35,36,37,39,40,41,42,43
      !by 44,45,46,47,48,48,49,49,49,49,49,49,49,49,49,48
      !by 48,47,47,46,45,44,43,42,41,39,38,37,35,34,32,31
      !by 29,28,26,25

saydık ve 7 değerini bulduk. Akümülatöre 7 değerini yüklüyoruz ve bu değeri sprit'ın y koordinatına yazıyoruz. Artık sprite'ımızın y koordinatı 7 oldu.

      ldx hareket_sayacı   
      lda sprite_sinus_tablosu,x
      sta $d001

Her seferinde, ilk sprite'ımızın y koordinatına, sinus tablosundan aldığımız değeri yazıyoruz, fakat biaizm toplam 8 sprite'ımız var.

      ldy #$00 -- > 8 sprite'a ilgili sinus değerini yazabilmek için, sprite y koordinatlarının yazıldığı, registeri arttırmak için kullanacağız.

      ldx hareket_sayacı   
-      lda sprite_sinus_tablosu,x
      sta $d001,y   

iny ile y registerini 1 kez arttırıyoruz.

Yani y registeri 1 olsun sta $d001,y dediğimizde, sta $d002 olur, fakat bu 2 nolu sprite'ın x koordinatı oluyor. Biz y koordinatına yazmak istiyoruz bu yüzden y registerini 2 arttırmamız gerekiyor.

spriteların y koordinat registerleri.

1 nolu sprite -- > $d001
2 nolu sprite -- > $d003
3 nolu sprite -- > $d005
4 nolu sprite -- > $d007
5 nolu sprite -- > $d009
6 nolu sprite -- > $d00b
7 nolu sprite -- > $d00d
8 nolu sprite -- > $d00f

burada bunu sağlıyoruz. 16 il kontrol etmemizin sebebi de bu. Yani her seferinde 2 artacağından 8 kez bu işlemi tekrarlaması gerekiyor. Daha sonra rutinden çıkmadan, tablodan değerleri okuduğumuz hareket sayacının değerini 1 arttırıyoruz.

      iny
      iny
      cpy #16
      bne -   

      inc hareket_sayacı

      rts
          
Bu kadar yazdık, artık ekranda bir şeyler görelim
Kod:
!to"sprite_animasyon.prg",cbm  	

* = $0801
     !byte $0b, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00

*=$080d

jsr $e544

lda #$00
sta $d020
sta $d021

lda #$ff
sta $d015 ;-- > tüm sprite'ları açtık.

ldx #$00
lda #$c0
- sta $07f8,x

inx
cpx #$08
bne -

ldx #$00
lda #$0f
- sta $d027,x

inx
cpx #$08
bne -

;x ekseninde diziyoruz

ldx #$00
lda #$3a
- sta $d000,x

clc
adc #$20

inx
inx
cpx #16
bne -


;artık y koordinatını irq rutin içinden yazdığımız için, y
;koordinatlarını yazdığımız kısmı siliyoruz
;y eksen bilgileri

lda #%10000000
sta $d010

sei

lda #$7f
                sta $dc0d

                lda #$01
                sta $d01a

lda #$00
sta $dc0e

              lda #$1b
              sta $d011

lda #$10
sta $d012

lda #<irq
sta $0314
lda #>irq
    sta $0315
 
              cli
jmp *
irq             
inc $d019

jsr sprite_animasyon

lda #$7a
sta $d012

jmp $ea81

sprite_animasyon

lda hareket_sayacı
cmp #100
bne +

lda #0
sta hareket_sayacı
+
ldy #$00
ldx hareket_sayacı
- lda sprite_sinus_tablosu,x
sta $d001,y

iny
iny
cpy #16
bne -

inc hareket_sayacı

rts
hareket_sayacı
!by 0

* = $3000
!byte 0,255,0,3,255,192,15,255,240,31
!byte 255,248,63,255,252,63,255,252,127,255
!byte 254,127,255,254,255,255,255,255,255,255
!byte 255,255,255,255,255,255,255,255,255,127
!byte 255,254,127,255,254,63,255,252,63,255
!byte 252,31,255,248,15,255,240,3,255,192
!byte 0,255,0,11

sprite_sinus_tablosu

!by 25,23,21,20,18,17,15,14,12,11,10,8,7,6,5,4
!by 3,2,2,1,1,0,0,0,0,0,0,0,0,0,1,1
!by 2,3,4,5,6,7,8,9,10,12,13,14,16,17,19,21
!by 22,24,25,27,28,30,32,33,35,36,37,39,40,41,42,43
!by 44,45,46,47,48,48,49,49,49,49,49,49,49,49,49,48
!by 48,47,47,46,45,44,43,42,41,39,38,37,35,34,32,31
!by 29,28,26,25



Derleyip çıktıyı çalıştırdığımızda, karşımıza siyah bir ekran çıkıyor, biraz bekleyince de, ekranın üstünden ekrana girip sonra tekrar kaybolan toplar çıkıyor. İyide biz bunları ekranın ortasına koymuştuk nooldu bunlara. Kahkaha
Logged
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #5 : Kasım 19, 2014, 22:21:49 ÖS »

Abi devamı gelecek mi?

Geliyor abi Kahkaha
Logged
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #6 : Kasım 19, 2014, 22:26:20 ÖS »

Sebebi bizim sinüs tablosunun yüzünden. Çünkü tablomuzdaki değerler 25'den başlayarak sıfıra kadar azalıyor. Sonra  tekrar 25' e kadar artarak yaklaşık 25 piksellik bir hareket sağlıyor.

Peki nasıl çözeceğiz. Bunun bir çok yöntemi var tabikii. Sinüs tablomuzu düzenleyip, nerede animasyon yapmak istiyorsak, o değerleri yazabiliriz. Veya sinüs tablosundan okuduğumuz değere, sprite'ın y koordinatı ekranın neresinde olacaksa, o değeri ekleyebiliriz. Bu şekilde tabloya bağlı kalmadan, ekranda isteiğimiz yere koyabiliriz
sprite'ımızı.

ilgili yeri aşağıdaki gibi düzeltip yeniden deniyoruz.

       ldx hareket_sayacı   
      lda sprite_sinus_tablosu,x
      clc
      adc #$a0
      sta $d001,y

Evet şimdi oldu. (yavuzg'nin meşhur şlakkk hareketinin tam yeri )

sprite'larımız ekranda yukarı aşağı salına salına hareket ediyor.





Peki bu sprite'larımızı dalga şeklinde hareket ettiremezmiyiz? Cevabı her sprite'ta sinüs tablomuzun, farklı bir yerinden değer okuyup, bir sonraki sprite'ın y koordinatına yazmak.

Şöyleki,

Birinci sprite'ımızı tablonun sıfırıncı basamağındaki değere koyarken, 2nci sprite'ımızı tablonun bir başka basamağındaki değere koyacağız.

Bu işlemi 8 sprite için tekrarladığımızda, ortaya dalgalanan sprite'larımız çıkacak.

Yani;
Kod:
		lda hareket_sayacı
cmp #100
bne +

lda #0
sta hareket_sayacı
+
ldy #$00
ldx hareket_sayacı
- lda sprite_sinus_tablosu,x
clc
adc #$a0
sta $d001,y

inx
inx
inx
inx
inx
inx
inx
inx
inx
inx

iny
iny
cpy #16
bne -

inc hareket_sayacı

Her seferinde sinus tablosundan, okuduğumuz yeri 10 (alt alta 10 tane inx) ileri taşıyarak farklı bir değer okuyoruz. Buradak inx sayısını değiştirerek, farkı görebilirsiniz.

Logged
Cengiz Demir
Uzman
*****
Mesaj Sayısı: 3.834



Üyelik Bilgileri
« Yanıtla #7 : Kasım 19, 2014, 22:33:42 ÖS »

Forumda projeler akııyoooorr..

Tabi bizlerde keyifle okuyoruz..

Eline sağlık joker
Logged

joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #8 : Kasım 19, 2014, 22:34:10 ÖS »

Efekti yaptık fakat, tam istediğimiz gibi harmonik bir salınım olmadı. Bunun için sinus tablomuzu iki kez okuyacağız.
   
sprite_sinus_tablosu

      !by 25,23,21,20,18,17,15,14,12,11,10,8,7,6,5,4
      !by 3,2,2,1,1,0,0,0,0,0,0,0,0,0,1,1
      !by 2,3,4,5,6,7,8,9,10,12,13,14,16,17,19,21
      !by 22,24,25,27,28,30,32,33,35,36,37,39,40,41,42,43
      !by 44,45,46,47,48,48,49,49,49,49,49,49,49,49,49,48
      !by 48,47,47,46,45,44,43,42,41,39,38,37,35,34,32,31
      !by 29,28,26,25
      
      !by 25,23,21,20,18,17,15,14,12,11,10,8,7,6,5,4
      !by 3,2,2,1,1,0,0,0,0,0,0,0,0,0,1,1
      !by 2,3,4,5,6,7,8,9,10,12,13,14,16,17,19,21
      !by 22,24,25,27,28,30,32,33,35,36,37,39,40,41,42,43
      !by 44,45,46,47,48,48,49,49,49,49,49,49,49,49,49,48
      !by 48,47,47,46,45,44,43,42,41,39,38,37,35,34,32,31
      !by 29,28,26,25
Yazıp deniyoruz



Ve sonunda efekt istediğimiz gibi, salına salına ekranda görünüyor.

Sanırım belitmeme gerek yok, kodları istediğiniz gibi kullanabilirsiniz. Kahkaha

Buradan indirebilirsiniz.

* sprite_anim.zip (645.69 KB - Yükleme: 233 kez.)
Logged
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #9 : Kasım 19, 2014, 22:35:17 ÖS »

Forumda projeler akııyoooorr..

Tabi bizlerde keyifle okuyoruz..

Eline sağlık joker

eyvallah abi
Logged
june8efe
Deneyimli
*****
Mesaj Sayısı: 1.288



Üyelik Bilgileri
« Yanıtla #10 : Kasım 19, 2014, 23:34:35 ÖS »

abi bunu video ders olarak kaydetseydin baya dua alırdın
inşallah c64'ü faaliyete geçirebilirsem, hazır kodları deneyerek, değiştirerek yavaş yavaş öğrenmek istiyorum. 
Logged

Geliştirme kartları: Raspberry Pi2, Arduino Uno R3
El konsolları: Ngage,DS Lite,Nintendo 3DS cfw
Tv konsolları: PS1, Hdd'li fat PS2, Wii (Softmod'lu), Xbox360 slim rgh, PS4 Slim
AmigAmigA
Uzman
*****
Mesaj Sayısı: 1.713


Mesaj Sayısı:978616432


Üyelik Bilgileri
« Yanıtla #11 : Kasım 19, 2014, 23:42:22 ÖS »

Aaah ah,o eski günler gözümün önüne geldi.Yıl 1987,elimde c64 kitabı ordaki kod satırlarının çözmeye çalışıyorum.İnternet yok,anlayan yok,sadece ben ve c64 kitabı.Azimle dolu heyecanlı aylar sonunda oyun yazmayı başarmıştım basic ile.Makine kodunuda duymuştum fakat elimde doküman olmadığı için içimde bir uhte olarak kalmıştı:)Bu yazı ile nerdeyse tekrar oturup kod yazacağım,teşekkürler Joker.
Logged
wizofwor
Genel Yönetici
*****
Mesaj Sayısı: 4.798


Gosub ile gidilen yerden goto ile dönen adam


Üyelik Bilgileri WWW
« Yanıtla #12 : Kasım 20, 2014, 00:56:37 ÖÖ »

Tabloyu iki kez okutma numarası iyiymiş. Spriteları açarken sprite pointerları ayarlamadın mı bana mı öyle geldi?
Logged

emarti
Uzman
*****
Mesaj Sayısı: 2.624


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #13 : Kasım 20, 2014, 01:33:45 ÖÖ »

Tabloyu iki kez okutma numarası iyiymiş. Spriteları açarken sprite pointerları ayarlamadın mı bana mı öyle geldi?

$07f8'den 8 kere c0'ı basmış abi
Logged

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB | https://c64kernal.com Genesis

READY.
SYS(64767): EMARTI
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #14 : Kasım 20, 2014, 08:01:00 ÖÖ »

abi bunu video ders olarak kaydetseydin baya dua alırdın
inşallah c64'ü faaliyete geçirebilirsem, hazır kodları deneyerek, değiştirerek yavaş yavaş öğrenmek istiyorum. 

Video ders olarak da yaparım kardeşim neden olmasın . Kodları denemek için, c64'ü kurmana gerek yok. Pc'de notpad ile yazıp, emulator ile deneyebilirsin. Ben hep bu şekilde yapıyorum.

Makine kodunuda duymuştum fakat elimde doküman olmadığı için içimde bir uhte olarak kalmıştı:)Bu yazı ile nerdeyse tekrar oturup kod yazacağım,teşekkürler Joker.

Benimde başlamam, aynı senin gibi oldu. Yıllardır içimde kalan uhde, hades'in c64türkiye dergilerindeki, assembler yazıları ile bir anda alevlendi. Sonrasında nightlord'un assembler dersleri ile başladım, devamı geldi.

İçindeki uhdeyi hayata geçirmek için, fazla beklemene gerek yok. Zaten un, su, şeker var. Sana sadece helva yapmak kalıyor


Tabloyu iki kez okutma numarası iyiymiş. Spriteları açarken sprite pointerları ayarlamadın mı bana mı öyle geldi?

$07f8'den 8 kere c0'ı basmış abi

Emarti çok dikkatlisin abi

      ldx #$00
      lda #$c0
-     sta $07f8,x

      inx
      cpx #$07
      bne -


Logged
Sayfa: [1] 2   Yukarı git
Yazdır
Gitmek istediğiniz yer: