User Tag List

Страница 6 из 51 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 501

Тема: Тема для всяких глупых вопросов

  1. #51

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    458
    Спасибо Благодарностей отдано 
    792
    Спасибо Благодарностей получено 
    268
    Поблагодарили
    103 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Книга "Как написать игру на ассемблере", там есть

    Andrew771, спасибо за информацию!!

    А что-то быстрее этого есть ?

  2. #52

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    А что-то быстрее этого есть ?
    Зависит от того, что за спрайты - прямоугольные? большие/маленькие? проверка краев экрана нужна? и т.д.
    Целая баталия по выводу спрайтов сейчас ведется тут

    Если брать за основу процедуры из книги, то можно:
    - раскрыть циклы (тело цикла написать 8 раз, а push/pop/djnz убрать);
    - удалить проверки краев экрана, если спрайты априори не выходят за края.
    Последний раз редактировалось Andrew771; 01.09.2020 в 10:36.

    Этот пользователь поблагодарил Andrew771 за это полезное сообщение:

    metamorpho(02.09.2020)

  3. #53

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для прямоугольных спрайтов, которые не выходят за пределы экрана, выгоднее кодировать строками спрайта, а не отдельными знакоместами. Тогда каждую строку выводишь командами ldir, предварительно задав нужную длину строки в байтах в bc. Переход на следующую строку знакоместа - inc h (или inc d).

    А самый быстрый способ - установить начало стека в нужное место экрана и перебрасывать командами по два байта сразу:
    ld hl,...
    push hl

    Этот пользователь поблагодарил Andrew771 за это полезное сообщение:

    metamorpho(02.09.2020)

  4. #54

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    458
    Спасибо Благодарностей отдано 
    792
    Спасибо Благодарностей получено 
    268
    Поблагодарили
    103 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    А самый быстрый способ - установить начало стека в нужное место экрана и перебрасывать командами по два байта сразу:
    ld hl,...push hl
    Andrew771, спасибо за идеи !!
    А как быть в случае со стеком если попадаешь на границу перехода одного из трёх блоков экранной памяти ?

  5. #55

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    А как быть в случае со стеком если попадаешь на границу перехода одного из трёх блоков экранной памяти ?
    Заново считать SP для первого знакоместа новой строки.
    Кстати, я еще встречал другой вариант, может с ним проще:
    pop hl ; читаем из памяти 2 байта спрайта
    ld (addr),hl ; помещаем по нужному адресу экрана

    Этот пользователь поблагодарил Andrew771 за это полезное сообщение:

    metamorpho(02.09.2020)

  6. #56

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    458
    Спасибо Благодарностей отдано 
    792
    Спасибо Благодарностей получено 
    268
    Поблагодарили
    103 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Заново считать SP для первого знакоместа новой строки.
    Кстати, я еще встречал другой вариант, может с ним проще:
    pop hl ; читаем из памяти 2 байта спрайта
    ld (addr),hl ; помещаем по нужному адресу экрана
    Andrew771, спасибо!!

  7. #57

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Привет всем!!

    Пишу на ассемблере свою первую игру для ZX Spectrum 48.
    Для начала мне нужен вот такой вывод спрайта - особенности:
    - видеорежим стандартный
    - вывод познакоместный
    - без маски
    - без буфера, сразу в экран
    - без OR, просто прямой вывод в экран

    Конечно нужна скорость, чтобы ничего не моргало и не дёргалось, а всё было плавно и красиво
    Какой вариант кода посоветуете использовать для такого вывода спрайта ?


    вывод спрайтов 32 и 24 на экран с урезанием по вертикали для Медноноговского варианта контроля стека

    Код:
    ;вывод спрайта 32*b
    
    screenhigh equ #c0
    
    drop_sprite32
    
    	ld	(sprite_sp0),sp
    ;hl adr spr
    ;de coor	
    ;Dy Ex 	0-ff 0-1f	
    ;b  sprite high	
    
    	ld	a,d
    	cp	screenhigh	;max Y
    	jr	c,drop_sp1	;middle check high
    	
    	add	a,b
    	jp	nc,drop_end	;out of screen
    
    	ld	c,a	
    	sub	b
    	neg
    	ld	b,c
    
    ;вычисляем обьем обрезания спрайта
    	add	a,a	;*2
    	add	a,a	;*4
    
    ;изменяем размер спрайта
    	add	a,l
    	ld	l,a
    	adc	a,h
    	sub	l
    	ld	h,a
    ;Y=0
    	ld	d,0
    	jr	drop_sp10
    
    drop_sp1
    
    ;проверяем уход за экран
    
    	sub	screenhigh
    	neg
    	cp	b
    	jr	nc,$+3
    	ld	b,a
    
    drop_sp10
    	ld	a,d
    	and	#38
    	add	a,a
    	add	a,a
    	add	a,e
    	ld	e,a
    	
    	ld	a,d
    	rra
    	rra
    	rra
    	and	#18
    	xor	d
    	and	#f8
    	xor	d
    	add	a,#40
    	ld	d,a
    	ld	a,b
    
    	ld	c,(hl)
    	inc	hl
    	ld	b,(hl)
    	inc	hl
    	ld	sp,hl
    	ld	h,d
    	ld	d,a
    
    drop_sp0	
    	ld	l,e
    
    	ld	(hl),c
    	inc	l
    	ld	(hl),b
    	inc	l
    	pop	bc
    	ld	(hl),c
    	inc	l
    	ld	(hl),b
    
    	dec	d
    	jp	z,drop_end
    
    	pop	bc
    
    	inc	h
    	ld	a,h
    	and	#07
    	jp	nz,drop_sp0
    	ld	a,e
    	add	a,32
    	ld	e,a
    	jr	c,drop_sp0
    	ld	a,h
    	sub	8
    	ld	h,a
    	jp	drop_sp0
    
    drop_end
    	ld	sp,0
    sprite_sp0 equ	$-2
    	ret	
    
    
    ;вывод спрайта 24*b
    
    
    drop_sprite24
    
    	ld	(sprite_sp0),sp
    ;hl adr spr
    ;de coor	
    ;Dy Ex 	0-ff 0-1f	
    ;b  sprite high	
    
    	ld	a,d
    	cp	screenhigh	;max Y
    	jr	c,drop_sp2	;middle check high
    	
    	add	a,b
    	jp	nc,drop_end	;out of screen
    
    	ld	c,a	
    	sub	b
    	neg
    	ld	b,c
    
    ;вычисляем обьем обрезания спрайта
    	ld	c,a
    	add	a,a	;*2
    	add	a,c	;*3
    
    ;изменяем размер спрайта
    	add	a,l
    	ld	l,a
    	adc	a,h
    	sub	l
    	ld	h,a
    ;Y=0
    	ld	d,0
    	jr	drop_sp20
    
    drop_sp2
    
    ;проверяем уход за экран
    
    	sub	screenhigh
    	neg
    	cp	b
    	jr	nc,$+3
    	ld	b,a
    
    drop_sp20
    	ld	a,d
    	and	#38
    	add	a,a
    	add	a,a
    	add	a,e
    	ld	e,a
    	
    	ld	a,d
    	rra
    	rra
    	rra
    	and	#18
    	xor	d
    	and	#f8
    	xor	d
    	add	a,#40
    	ld	d,a
    	ld	a,b
    
    	ld	c,(hl)
    	inc	hl
    	ld	b,(hl)
    	inc	hl
    	ld	sp,hl
    	ld	h,d
    	ld	d,a
    
    drop_sp240	
    	ld	l,e
    
    	ld	(hl),c
    	inc	l
    	ld	(hl),b
    	inc	l
    	pop	bc
    	ld	(hl),c
    
    
    	dec	d
    	jp	z,drop_end
    
    	inc	h
    	ld	a,h
    	and	#07
    	jp	nz,drop_sp241
    	ld	a,e
    	add	a,32
    	ld	e,a
    	jr	c,drop_sp241
    	ld	a,h
    	sub	8
    	ld	h,a
    
    drop_sp241
    	ld	l,e
    
    	ld	(hl),b
    	inc	l
    	pop	bc
    	ld	(hl),c
    	inc	l
    	ld	(hl),b
    
    	dec	d
    	jp	z,drop_end
    
    	pop	bc
    
    	inc	h
    	ld	a,h
    	and	#07
    	jp	nz,drop_sp240
    	ld	a,e
    	add	a,32
    	ld	e,a
    	jr	c,drop_sp240
    	ld	a,h
    	sub	8
    	ld	h,a
    	jp	drop_sp240
    [свернуть]
    С уважением,
    Jerri / Red Triangle.

    Эти 2 пользователя(ей) поблагодарили jerri за это полезное сообщение:

    Bedazzle(04.09.2020), metamorpho(03.09.2020)

  8. #58

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    458
    Спасибо Благодарностей отдано 
    792
    Спасибо Благодарностей получено 
    268
    Поблагодарили
    103 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    jerri, спасибо!!

  9. #59

    Регистрация
    24.08.2012
    Адрес
    г. Волжский
    Сообщений
    458
    Спасибо Благодарностей отдано 
    792
    Спасибо Благодарностей получено 
    268
    Поблагодарили
    103 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Правильно ли я понял что на Спектруме в стандартном графическом режиме
    сделать горизонтальный или вертикальный скролин плавно по одной точке не получиться если
    рядом стоящие знакоместа имеют разный атрибут цвета ?

  10. #60

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от metamorpho Посмотреть сообщение
    Правильно ли я понял что на Спектруме в стандартном графическом режиме
    сделать горизонтальный или вертикальный скролин плавно по одной точке не получиться если
    рядом стоящие знакоместа имеют разный атрибут цвета ?
    на спектруме окраска цветом происходит по блокам 8х8
    попиксельный цветной скролл на спектруме вообще не возможен если не использовать различные хитрости.
    С уважением,
    Jerri / Red Triangle.

    Этот пользователь поблагодарил jerri за это полезное сообщение:

    metamorpho(04.09.2020)

Страница 6 из 51 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)

Похожие темы

  1. Ответов: 42
    Последнее: 05.05.2021, 17:01
  2. Общая тема для моих вопросов (ассемблер и zx spectrum)
    от moronizzz в разделе Для начинающих
    Ответов: 17
    Последнее: 23.08.2016, 18:13
  3. тема для мобильного....
    от rasmer в разделе Музыка
    Ответов: 0
    Последнее: 18.01.2008, 20:25

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •