› Foros › Multiplataforma › Desarrollo
La idea que yo tenía era leer de la VDP en la posición en la que se encuentra el personaje (pero en este caso el plano A o B), la duda es que no se si leyendo esa posición devuelve el color en que está pintada la pantalla (y así utilizar un color específico para el "suelo") dependiendo de donde esté el color que me indica la altura de el suelo, pinto el personaje más arriba o más abajo....
dim text(7) as string
dim nib(3) as integer
text$(0) = "Black "
text$(1) = "Red "
text$(2) = "Green "
text$(3) = "Blue "
text$(4) = "Yellow "
text$(5) = "Magenta"
text$(6) = "Cyan "
text$(7) = "White "
palettes tile_pallette,0,0,8
loadtiles tile_data,3,1
drawtile 2,4,4
drawtile 3,5,4
sprite = addsprite(1,1)
propsprite sprite,1,0
x = 16
y = 24
do
j = joypad(0)
x+= j.3-j.2
y+= j.1-j.0
movesprite sprite,128+x,128+y
tile_x = (x+3)>>3
tile_y = (y+3)>>3
tile = readtile(tile_x,tile_y)
pixel_x = x+3-(tile_x<<3)
pixel_y = y+3-(tile_y<<3)
address = pixel_x>>2*2+(pixel_y*4)+(tile*32)
word = vdpramread(address)
o = 0
nib(0) = word /4096: o+= nib(0)*4096
nib(1) = (word-o)/256 : o+= nib(1)*256
nib(2) = (word-o)/16 : o+= nib(2)*16
nib(3) = word-o
color = nib(pixel_x-((pixel_x>>2)*4))
locate 0,0
print text$(color)
sleep 3
loop
tile_pallette:
dataint $000,$00E,$0E0,$E00,$0EE,$E0E,$EE0,$EEE
tile_data:
datalong $00010000
datalong $00010000
datalong $00010000
datalong $11101110
datalong $00010000
datalong $00010000
datalong $00010000
datalong $00000000
datalong $00001111
datalong $00001111
datalong $00001111
datalong $00001111
datalong $44445555
datalong $44445555
datalong $44445555
datalong $44445555
datalong $22223333
datalong $22223333
datalong $22223333
datalong $22223333
datalong $66667777
datalong $66667777
datalong $66667777
datalong $66667777
Para la posición horizontal:
x+= velocidad *cos(angulo);
y+= velocidad *sin(angulo);
Para la posición vertical:
x+= gravedad *sin(angulo);
y+= gravedad *cos (angulo);
Así por ejemplo, un entero lo dividimos en 128 unidades en lugar de en 100 (en caso de usar solo dos decimales). Por lo tanto tienes que operar pensando que 0.5 es en realidad 64, 1 es 128, 2 es 256, y 2.25 es 288.
Para calcular el entero real, se hace un desplazamiento de bits. Si usamos 256 (8 bits) para determinar los decimales, entonces hacemos un desplazamiento de bits "posicion >> 8", y tendrás la parte entera real del número.