Gönderen Konu: Sprite cogullama  (Okunma sayısı 16234 defa)

Sprite cogullama

« Yanıtla #15 : 02.11.2009 16:52:36 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Alıntı yapılan: skate;21674
Bu tür cycle kritik durumlarda loop kullanmayı aklından bile geçirme kardeşim, açık olarak yazman lazım loopu. Sonda kullandığın cpx bne v.b. komutlar çok fazla cycle yerler. Anlattığım trick 8 sprite söz konusu olduğunda iç ekran açıkken tek çözüm diyebiliriz. Tek handikapı ekran değişeceği için eğer karakter ekranında birşeyler varsa aynı ekranın birden fazla yerde kopyasının bulunması gerekmesidir.

Zaten alt satır için loopsuz yazmıştım çünkü loop'lu yazınca 3.sprite'tan ilerisini çizemiyor. Bu örnekte ekran adresini ne şekilde değiştirmem gerektiğini yazabilirsen çok makbule geçer :) Çünkü herhalde birşeyi eksik yapıyorum...
 
Birde karakter ekranında birşey varsa birkaç yerde kopyası olması gerekir diyorsun. yani eğer scroll varsa ne olacak? Gerçi spriteların olduğu alanda olmadığı, daha aşağılarda olduğu için herhalde sorun olmayacaktır diye düşünüyorum. Çünkü scroll'un olduğu alana gelene kadar ekranı default yeri olan $0400'e alabiliriz herhalde?
« Son Düzenleme: 02.11.2009 16:55:57 Gönderen: stranger »

Sprite cogullama

« Yanıtla #16 : 02.11.2009 17:08:42 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Ekran adresini öncelikle sen belirleyeceksin. Diyelim ki $3800 ve $3c00'ı kullanmak istedin, yani ilk bankın mümkün olan son iki $400'lük alanını. Bu durumda
 
$3800 için
 
lda #$e4
sta $d018
 
$3c00 için
 
lda #$f4
sta $d018
 
sprite adresleri ise
 
$3800 için
 
$3bf8-$3bff
 
$3c00 için
 
$3ff8-$3fff
 
arasında yer alacaktır.
 
şeklinde geçiş yapabilirsin. Scroll konusunda doğru düşünüyorsun, spriteların bittiği yerden sonra istediğin bir ekrana geçip o ekranda scroll yapabilirsin. Örneğin ekranın üst yarısı (tam sprite multiplex edilen satırın olduğu yere kadar) $3800'ü, alt yarısı ise $3c00'ı gösteriyorsa bu durumda spriteların bitiminde bir değişiklik yapmazsan zaten ekranın alt bölümünde $3c00'dan itibaren olan adresler gösterilecek. Sen önceki rutininde diyelim ki 20. satırdan bir scroll geçiriyorsun ki varsayılanda bu satırın başlangıcı $0400+20*40 = $0720'ye denk geliyor. "$07XX" şeklindeki tüm adresleri "$3fXX" şekline çevirirsen scroll doğru ekranda kaymaya devam edecektir. Kısacası $3c00+20*40 = $3f20 şeklinde hesaplanır $3c00'daki ekran adresindeki scroll satırının hafıza adresi.

Sprite cogullama

« Yanıtla #17 : 02.11.2009 23:28:03 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Skate trick mükemmel şekilde çalışıyor. Eline sağlık. Kodun çalışan halinide buraya paste ediyorum ki ileride belki birilerinin işine yarar yada ilgisini çeker.
 
!to"irq0c.prg",cbm
;Ekran ayarları
ekran0=87 ;2 ila 87 pixeller arası 0.ekran
ekran1=ekran0+21+1 ;buna 21 pixellik sprite uzunluğunu ve 1 pixel fazlalık ilave ettik
ykor0=ekran0-20 ; üst sıradaki spriteların y koordinatı
ykor1=(ykor0+21); alt sıradaki spriteların y koordinatı
* = $0801 ;autorun
!byte $0c, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00
*=$080d
;$3800'deki ekranı temizle
ldx#0
lda#$20
sta$3840,x
inx
bne *-4

;Ekran rengi siyah
ldx#$00
stx$d020
stx$d021
;ekran siliniyor tüm spritelar açılıyor
jsr$e544
lda#$ff
sta$d015
;x koordinatında $55 'ten başlayıp 24 pixel arayla spritelar diziliyor
ldx#$00
lda#$55
sta$d000,x
clc
adc#24
inx
inx
cpx#16
bne *-10
;interrupt rutini
sei
lda #$7f
sta $dc0d
lda $d01a
ora #$01
sta $d01a
lda $d011
and #$7f
sta $d011
lda #$2
sta $d012
lda #sta $0314
lda #>irq1
sta $0315
cli
jmp*
irq1:
;ekran normal $0400'de
lda #$14
sta $d018
;spritelar y koordinatında diziliyor
ldy# ykor0
sty$d001
sty$d003
sty$d005
sty$d007
sty$d009
sty$d00b
sty$d00d
sty$d00f
;üst spritelar için $c0x$40=$3000 den data alıyoruz
ldx #$00
lda #$c0
sta $07f8,x
inx
cpx #8
bne *-6
;ekran0 ın değeri ile ekranı bölüp diğer irq ya atlıyoruz
lda #sta $0314
lda #>irq2
sta $0315
lda #ekran0
sta $d012
lda#$01
sta$d019
jmp $ea7e
;Alt sıradaki spritelar ile ilgili bölüm
irq2:
ldy# ykor1
sty$d001
sty$d003
sty$d005
sty$d007
sty$d009
sty$d00b
sty$d00d
sty$d00f
;Ekran $3800'de
lda #$e4
sta $d018
;Spritelarda $3c00'da
ldx #$00
lda #$f0
sta $3bf8,x
inx
cpx #8
bne *-6
lda #sta $0314
lda #>irq1
sta $0315
lda #ekran1
sta $d012
lda#$01
sta$d019
jmp $ea7e
* = $3000
!byte %11111111,%11111111,%11111111
!byte %00000000,%00000000,%00000000
!byte %11111111,%11111111,%11111111
!byte %00000000,%00000000,%00000000
!byte %11111111,%11111111,%11111111
!byte %00000000,%00000000,%00000000
!byte %11111111,%11111111,%11111111
!byte %00000000,%00000000,%00000000
!byte %11111111,%11111111,%11111111
!byte %00000000,%00000000,%00000000
!byte %11111111,%11111111,%11111111
!byte %00000000,%00000000,%00000000
!byte %11111111,%11111111,%11111111
!byte %00000000,%00000000,%00000000
!byte %11111111,%11111111,%11111111
!byte %00000000,%00000000,%00000000
!byte %11111111,%11111111,%11111111
!byte %00000000,%00000000,%00000000
!byte %11111111,%11111111,%11111111
!byte %00000000,%00000000,%00000000
!byte %11111111,%11111111,%11111111
*=$3c00
!byte %11111111,%11111111,%11111111
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %10011001,%10011001,%10011001
!byte %11111111,%11111111,%11111111
« Son Düzenleme: 03.11.2009 09:24:53 Gönderen: stranger »

Sprite cogullama

« Yanıtla #18 : 03.11.2009 00:02:38 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Belki buraya post ederken birşey değiştirmiş olabilirsin ancak post ettiğin kodda sprite pointer adresleri hatalı. Ekran $3800'de olduğuna göre;
 
sta$3ff8,x

satırı
 
sta $3bf8,x
 
şeklinde düzeltilmeli. O zaman da düzgün çalışıyor zaten. Geri kalan kod gayet düzgün çalışıyor, eline sağlık. Multiplexer yapabilmek ve bu tür trickleri kullanabilmek demek çok daha advanced efektler için hazır olduğunu gösteriyor kardeşim. Partide sana göstereceğim birkaç güzel trick var, özellikle Cumartesi geceyarısından sonra bol bol takılırız seninle :)

Sprite cogullama

« Yanıtla #19 : 03.11.2009 09:27:46 »
Hızlı düğmeleri aç

stranger

İleti: 241

Çevrimdışı
  • ***
  • Full Member
    • Profili Görüntüle
Sanırım yapıştırırken bişeyler oldu. Kodun en son halinde $3800'deki ekranı silmeye gerek kalmıyordu. şu anda pointerları düzelttim+ekranı silme rutini ekledim çalışıyor. Yinede eve gidince bakıcam bende merak ettim.