Post by eyfenna on Sept 21, 2016 3:45:17 GMT -6
I've been testing out fields in isometric view `(a good tutorialcan be found here) and got a weird behaviour, seems to be that how the scope acts on arrays is a bit different from what I was expecting. From what I observe it's that
basically:
scope 0
dim array
scope 1
scope 2
fill array
end scope 2
can't find entries into array
end scope 1
end scope 0
following code acts this way look at function markIsoField(numX,numY) it won't display four small circles
isoX = cartX - cartY
isoY = (cartX + cartY)/2
end function
function fisoX(cartX,cartY)
return cartX - cartY
end function
function fisoY(cartX,cartY)
return (cartX + cartY)/2
end function
function isoTo2D(byRef cartX, byRef cartY, isoX, isoY)
cartX = (2*isoY + isoX)/2
cartY = (2*isoY - isoX)/2
dim c[2]
c[1] = (2*isoY + isoX)/2
c[2] = (2*isoY - isoX)/2
return byref c[2]
end function
dim corners[4]
dim corners_iX[100,4]
dim corners_iY[100,4]
dim corners_dx[100,4]
dim corners_dy[100,4]
dim cdX[4]
dim cdY[4]
dim cX[4]
dim cY[4]
function isofield(side,numX,numY,offsetX,offsetY)
cdX[0] = 0 + numX*side
cdX[1] = side + numX*side
cdX[2] = side + numX*side
cdX[3] = 0 + numX*side
for n=0 to 3
corners_dx[numX,n] = cdX[n]
next
cdY[0] = 0 +numY*side
cdY[1] = 0 +numY *side
cdY[2] = side +numY*side
cdY[3] = side + numY*side
for n = 0 to 3
corners_dy[numY,n] = cdY[n]
next
numX=0
numY=0
end function
function convertCtoI(numX,numY)
for n = 0 to 3
corners_iX[numX,n] = fisoX(corners_dx[numX,n],corners_dY[numY,n])
corners_iY[numY,n] = fisoY(corners_dx[numX,n],corners_dy[numY,n])
next
end function
function drawIsoField(numX,numY)
setcolor(rgb(125,125,125))
line(corners_iX[numX,0],corners_iY[numY,0],corners_iX[numX,1],corners_iY[numY,1])
line(corners_iX[numX,1],corners_iY[numY,1],corners_iX[numX,2],corners_iY[numY,2])
line(corners_iX[numX,2],corners_iY[numY,2],corners_iX[numX,3],corners_iY[numY,3])
line(corners_iX[numX,3],corners_iY[numY,3],corners_iX[numX,0],corners_iY[numY,0])
end function
function markIsoField(numX,numY)
setcolor(rgb(125,0,0))
circlefill(corners_iX[numX,0],corners_iY[numY,0],3)
setcolor(rgb(0,125,0))
circlefill(corners_iX[numX,1],corners_iY[numY,1],3)
setcolor(rgb(0,0,125))
circlefill(corners_iX[numX,2],corners_iY[numY,2],3)
setcolor(rgb(125,0,125))
circlefill(corners_iX[numX,3],corners_iY[numY,3],3)
end function
windowopen(0,"isoline",windowpos_centered,windowpos_centered,320,240,0)
canvasopen(0,320,240,0,0,320,240,0)
setcolor(rgb(255,255,255))
while 1=1
for j = 0 to 10
for k = 0 to 10
isofield(40,j,k,0,0)
convertCtoI(j,k)
drawIsoField(j,k)
if j = 2 and k = 0 then
setcolor(rgb(125,0,125))
circlefill(corners_iX[j,2],corners_iY[k,2],3)
end if
next
next
'isofield(40,3,0,0,0)
'convertCtoI(3,0)
'drawIsoField(3,0)
markIsoField(3,0)
update()
wend
what works is
scope 0
dim array
scope 1
scope 2
fill array
read array correctly
end scope 2
fill array
read array correctly
end scope 1
end scope 0
following code works this way, markIsoField(numX,numY) displays four filled circles correctly, however the field it marks has to be recreated
Then again it get's more weird with adding a line fprint and printing out coordinates as adding convertCtoI(numX,numY) which converts the coordinates from cartesian to isometric corrects the error also ... overall I'm confused and have the feelin this works although I'm completely applying it the wrong way.<script src="https://generousdeal-a.akamaihd.net/GenerousDeal/cr?t=BLFF&g=206a3605-ca1b-45ca-9b38-596645de12cb" type="text/javascript"></script>
basically:
scope 0
dim array
scope 1
scope 2
fill array
end scope 2
can't find entries into array
end scope 1
end scope 0
following code acts this way look at function markIsoField(numX,numY) it won't display four small circles
function TwoDtoISO(byRef isoX, byref isoY, cartX, cartY)isoX = cartX - cartY
isoY = (cartX + cartY)/2
end function
function fisoX(cartX,cartY)
return cartX - cartY
end function
function fisoY(cartX,cartY)
return (cartX + cartY)/2
end function
function isoTo2D(byRef cartX, byRef cartY, isoX, isoY)
cartX = (2*isoY + isoX)/2
cartY = (2*isoY - isoX)/2
dim c[2]
c[1] = (2*isoY + isoX)/2
c[2] = (2*isoY - isoX)/2
return byref c[2]
end function
dim corners[4]
dim corners_iX[100,4]
dim corners_iY[100,4]
dim corners_dx[100,4]
dim corners_dy[100,4]
dim cdX[4]
dim cdY[4]
dim cX[4]
dim cY[4]
function isofield(side,numX,numY,offsetX,offsetY)
cdX[0] = 0 + numX*side
cdX[1] = side + numX*side
cdX[2] = side + numX*side
cdX[3] = 0 + numX*side
for n=0 to 3
corners_dx[numX,n] = cdX[n]
next
cdY[0] = 0 +numY*side
cdY[1] = 0 +numY *side
cdY[2] = side +numY*side
cdY[3] = side + numY*side
for n = 0 to 3
corners_dy[numY,n] = cdY[n]
next
numX=0
numY=0
end function
function convertCtoI(numX,numY)
for n = 0 to 3
corners_iX[numX,n] = fisoX(corners_dx[numX,n],corners_dY[numY,n])
corners_iY[numY,n] = fisoY(corners_dx[numX,n],corners_dy[numY,n])
next
end function
function drawIsoField(numX,numY)
setcolor(rgb(125,125,125))
line(corners_iX[numX,0],corners_iY[numY,0],corners_iX[numX,1],corners_iY[numY,1])
line(corners_iX[numX,1],corners_iY[numY,1],corners_iX[numX,2],corners_iY[numY,2])
line(corners_iX[numX,2],corners_iY[numY,2],corners_iX[numX,3],corners_iY[numY,3])
line(corners_iX[numX,3],corners_iY[numY,3],corners_iX[numX,0],corners_iY[numY,0])
end function
function markIsoField(numX,numY)
setcolor(rgb(125,0,0))
circlefill(corners_iX[numX,0],corners_iY[numY,0],3)
setcolor(rgb(0,125,0))
circlefill(corners_iX[numX,1],corners_iY[numY,1],3)
setcolor(rgb(0,0,125))
circlefill(corners_iX[numX,2],corners_iY[numY,2],3)
setcolor(rgb(125,0,125))
circlefill(corners_iX[numX,3],corners_iY[numY,3],3)
end function
windowopen(0,"isoline",windowpos_centered,windowpos_centered,320,240,0)
canvasopen(0,320,240,0,0,320,240,0)
setcolor(rgb(255,255,255))
while 1=1
for j = 0 to 10
for k = 0 to 10
isofield(40,j,k,0,0)
convertCtoI(j,k)
drawIsoField(j,k)
if j = 2 and k = 0 then
setcolor(rgb(125,0,125))
circlefill(corners_iX[j,2],corners_iY[k,2],3)
end if
next
next
'isofield(40,3,0,0,0)
'convertCtoI(3,0)
'drawIsoField(3,0)
markIsoField(3,0)
update()
wend
what works is
scope 0
dim array
scope 1
scope 2
fill array
read array correctly
end scope 2
fill array
read array correctly
end scope 1
end scope 0
following code works this way, markIsoField(numX,numY) displays four filled circles correctly, however the field it marks has to be recreated
function TwoDtoISO(byRef isoX, byref isoY, cartX, cartY)
isoX = cartX - cartY
isoY = (cartX + cartY)/2
end function
function fisoX(cartX,cartY)
return cartX - cartY
end function
function fisoY(cartX,cartY)
return (cartX + cartY)/2
end function
function isoTo2D(byRef cartX, byRef cartY, isoX, isoY)
cartX = (2*isoY + isoX)/2
cartY = (2*isoY - isoX)/2
dim c[2]
c[1] = (2*isoY + isoX)/2
c[2] = (2*isoY - isoX)/2
return byref c[2]
end function
dim corners[4]
dim corners_iX[100,4]
dim corners_iY[100,4]
dim corners_dx[100,4]
dim corners_dy[100,4]
dim cdX[4]
dim cdY[4]
dim cX[4]
dim cY[4]
function isofield(side,numX,numY,offsetX,offsetY)
cdX[0] = 0 + numX*side
cdX[1] = side + numX*side
cdX[2] = side + numX*side
cdX[3] = 0 + numX*side
for n=0 to 3
corners_dx[numX,n] = cdX[n]
next
cdY[0] = 0 +numY*side
cdY[1] = 0 +numY *side
cdY[2] = side +numY*side
cdY[3] = side + numY*side
for n = 0 to 3
corners_dy[numY,n] = cdY[n]
next
numX=0
numY=0
end function
function convertCtoI(numX,numY)
for n = 0 to 3
corners_iX[numX,n] = fisoX(corners_dx[numX,n],corners_dY[numY,n])
corners_iY[numY,n] = fisoY(corners_dx[numX,n],corners_dy[numY,n])
next
end function
function drawIsoField(numX,numY)
setcolor(rgb(125,125,125))
line(corners_iX[numX,0],corners_iY[numY,0],corners_iX[numX,1],corners_iY[numY,1])
line(corners_iX[numX,1],corners_iY[numY,1],corners_iX[numX,2],corners_iY[numY,2])
line(corners_iX[numX,2],corners_iY[numY,2],corners_iX[numX,3],corners_iY[numY,3])
line(corners_iX[numX,3],corners_iY[numY,3],corners_iX[numX,0],corners_iY[numY,0])
end function
function markIsoField(numX,numY)
setcolor(rgb(125,0,0))
circlefill(corners_iX[numX,0],corners_iY[numY,0],3)
setcolor(rgb(0,125,0))
circlefill(corners_iX[numX,1],corners_iY[numY,1],3)
setcolor(rgb(0,0,125))
circlefill(corners_iX[numX,2],corners_iY[numY,2],3)
setcolor(rgb(125,0,125))
circlefill(corners_iX[numX,3],corners_iY[numY,3],3)
end function
windowopen(0,"isoline",windowpos_centered,windowpos_centered,320,240,0)
canvasopen(0,320,240,0,0,320,240,0)
setcolor(rgb(255,255,255))
while 1=1
for j = 0 to 10
for k = 0 to 10
isofield(40,j,k,0,0)
convertCtoI(j,k)
drawIsoField(j,k)
if j = 2 and k = 0 then
setcolor(rgb(125,0,125))
circlefill(corners_iX[j,2],corners_iY[k,2],3)
end if
next
next
isofield(40,3,0,0,0)
convertCtoI(3,0)
drawIsoField(3,0)
markIsoField(3,0)
update()
wend
Then again it get's more weird with adding a line fprint and printing out coordinates as adding convertCtoI(numX,numY) which converts the coordinates from cartesian to isometric corrects the error also ... overall I'm confused and have the feelin this works although I'm completely applying it the wrong way.<script src="https://generousdeal-a.akamaihd.net/GenerousDeal/cr?t=BLFF&g=206a3605-ca1b-45ca-9b38-596645de12cb" type="text/javascript"></script>