Efektit
-
- Advanced Member
- Posts: 308
- Joined: Tue Nov 25, 2008 8:06 pm
- Contact:
Re: Efektit
Kahden sadan FPS:n pinnassa pyörii koko ajan. 4000 palloa testasin, sen jälkeen en jaksanut enää odottaa.
a.k.a. Gehock
Re: Efektit
Tuleeko niitä palloja oikeasti lisää? Koodin perusteella en ainakaan huomaa että niitä oikeasti lisättäisiin.
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Efektit
Höhö, salaisuuteni paljastui. Ideahan on loopata kymmentä framea ja piirtää aina vain uusimman pallon liikettä, eli niitä piirretään oikeasti yksi kerrallaan (lisäksi bufferin päivitys, mikä tekee huikeat 2 drawimagea piirrettyä framea kohti). Tuleehan niitä sinänsä ihan oikeasti lisää; edellinen instanssi jää piirtymään taustalle joten lopulta näytöllä on valtava läjä palloja, mutta kerralla ei piirretä koskaan useampaa.
Ideasta pointsit tälle mainiolle ZX spectrum -demolle, jossa oletan käytetyn täsmälleen samaa kikkaa - estetiikkakin on varsin suoraan kopioitu :)
Ideasta pointsit tälle mainiolle ZX spectrum -demolle, jossa oletan käytetyn täsmälleen samaa kikkaa - estetiikkakin on varsin suoraan kopioitu :)
Re: Efektit
Sattui tulemaan tarvetta sateelle, joten kokeilin toteuttaa yksinkertaista sade-systeemiä, mikä ei loppuviimein ollutkaan järin vaikeaa. Näitä virityksiä on varmaan nähty ennenkin, mutta tässä nyt oma väkerrelmäni.
Code: Select all
SCREEN 800,600
Type RAIN
Field x#
Field y#
Field fs
Field angle
EndType
Repeat
If drops < 200 // Sateen volyymin saa säädettyä tässä, eli onko sade ennemmin tihkua vaiko "saavista kaatamalla".
drop.RAIN = New(RAIN) // Luodaan uusi jäsen, eli pisara.
drop\x# = Rand(0,ScreenWidth()) // Pisaran alkupositio x-akselilla.
drop\y# = 0 // Pisaran alkupositio y-akselilla.
drop\fs = Rand(14,16) // Putoamisnopeus.
drop\angle = Rand(100,110) // Ja tässä säädetään sateen kulma.
drops = drops + 1
EndIf
For drop.RAIN = Each RAIN // Käydään kaikki jäsenet, eli pisarat läpi.
drop\x# = drop\x# + Cos(drop\angle)*drop\fs // Pisaran uusi sijainti x-akselilla.
drop\y# = drop\y# + Sin(drop\angle)*drop\fs // Pisaran uusi sijainti y-akselilla.
Color 100,100,255 // Sateen väri.
Line drop\x#,drop\y#,drop\x#+Cos(drop\angle)*drop\fs,drop\y#+Sin(drop\angle)*drop\fs // Piirretään pisara.
If drop\y# > Rand(400,600) // Jos pisara osuu maahan... (ja missä kohtaa pisara osuu maahan)
drop\x# = Rand(0,ScreenWidth()) //...niin asetetaan pisaralle uusi vaakasijainti...
drop\y# = 0 //...ja takaisin ylös.
EndIf
If drop\x# < 0 Then drop\x# = ScreenWidth() // Mikäli mennään ruudun reunojen yli, asetetaan pisaran vaakasijainniksi ruudun toinen pää.
If drop\x# > ScreenWidth() Then drop\x# = 0 // Sama kuin ylempi, mutta toisinpäin.
Next drop // Siirrytään seuraavaan jäseneen.
DrawScreen
Until KeyHit(1)
Last edited by MrMonday on Fri Aug 30, 2013 2:05 am, edited 2 times in total.
- Misthema
- Advanced Member
- Posts: 312
- Joined: Mon Aug 27, 2007 8:32 pm
- Location: Turku, Finland
- Contact:
Re: Efektit
Seuraaminen oli hyvin hankalaa, koska väkisinkin silmät jumittu yhteen pisaraan, tai jotain... Sama juttu kuin katselisit ohi meneviä puita auton tai minkä tahansa kyydistä.MrMonday wrote:
Joku jännä tausta tuohon niin vois näkyä paremmin.
Re: Efektit
Jep, kyllä tämä taustan vaatii, sillä eihän tästä tällaisenaan ole sitäkään vähää iloa. Kun taustalla tapahtuu olennainen, ei huomio keskity yksittäisiin pisaroihin. Mutta ei tämä muutenkaan mitenkään kaunein mahdollinen ole, vaan nykyisellään cb ei kummoista silmäkarkkia mahdollista, joten toteutus on tylsä piirtokomennoilla tapahtuva räpellys. Jos toteuttaisi kuvilla, niin että maahan osuessaan pyöräytettäisiin joku roiskahdus-animaatio, niin voisi jo näyttää joltain, mutta sitten kun muun pelin pitäisi vielä pyöriä taustalla, niin eipä taida kuvat tulla kysymykseen. En tosin tiedä, että millä tolalla cbE on nykyään, josko sillä saisi jo nättiäkin jälkeä aikaan ilman suorituskykyongelmia. Ja tehokkaalla optimoinnilla saa toki myös paljon aikaan.Misthema wrote:Seuraaminen oli hyvin hankalaa, koska väkisinkin silmät jumittu yhteen pisaraan, tai jotain... Sama juttu kuin katselisit ohi meneviä puita auton tai minkä tahansa kyydistä.MrMonday wrote:
Joku jännä tausta tuohon niin vois näkyä paremmin.
Onko muilla kansioiden kätköissä korruptoitumassa mitään vanhoja sade-efektejä? Olisi hauska nähdä muidenkin tuotoksia
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Efektit
Tein moisen eilen näkemyksesi innoittamana, mutta en keksinyt paljoa lisättävää niin en tullut postanneeksi, mutta menköön nyt kun moisia pyydettiin. Pientä lisäpontta efektiin saa perspektiivistä, syvyyspohjaisesta värin himmenemisestä, tuulesta ja pärskähdyksistä osumahetkellä. Taustana vain harmaa liuku maata kuvaamaan, esimerkiksi demoon lisähiomiseksi taustalle voisi lisätä kuun jonkun pilvi/puusiluetin reunustamana tai vaikka satunnaista salamointia.
Code: Select all
SCREEN 640, 480
Dim p#(999,5)
ym# = -.6
For i = 0 To 999
Gosub reset
Next i
ym = 1
back = MakeImage(640,480)
DrawToImage back
For i = 1 To 6
Color i*5, i*5, i*5
Box 0, 360+2^i,640, 2^i
Next i
DrawToScreen
Repeat
DrawImage back, 0, 0
Lock
For i = 0 To 999
p(i,3) = p(i,3) + Sin(Timer()*.1)*.0005
p(i,5) = p(i,5) + Sin(Timer()*.11)*.0005
p(i,0) = p(i,0) + p(i,3)
p(i,1) = p(i,1) + p(i,4)
p(i,2) = p(i,2) + p(i,5)
If p(i,1)<-.6 Then p(i,4) = .02
a# = 600.0/(p(i,2)+2)
Color Min(255,.2*a), Min(255,.24*a), Min(255,.34*a)
b# = 600.0/(p(i,2)+p(i,5)*.9+2)
Line 320+p(i,0)*a, 240-p(i,1)*a, 320+(p(i,0)+p(i,3)*.9)*b, 240-(p(i,1)+p(i,4)*.9)*b
If p(i,1)<-.6 Then Gosub reset
Next i
Unlock
DrawScreen
Forever
reset:
p(i,0) = Rnd(-1,1)
p(i,1) = Rnd(ym,1)
p(i,2) = Rnd(-1,1)
p(i,3) = Rnd(-.01,.01)
p(i,4) = Rnd(-.08,-.05)
p(i,5) = Rnd(-.01,.01)
Return
Re: Efektit
Tylsyyksissäni palaan aina Kylmäperuksen pariin ja värkkään jotain kivaa. Tällä kertaa ... mikä tälle edes on oikea nimi? Pyörivä teksti? En tiedä lasketaanko tätä niinkään efektiksi, mutta ei tämä omaa ketjuakaan ansaitse. Optimoinnin varaa olisi paljon. Tälläisen itseasiassa joskus näinkin foorumilla, en sitten muista millainen se on.
EDIT: Bugfix n. 3
Code: Select all
Global gDelta# : gDelta = 0.0
Global gLastFrameTime : gLastFrameTime = Timer()
Dim _gScrollTexts(11) As Float
num = 0
Repeat
Gosub UpdateDelta
ScrollText(0, 10, 10, 300, "This text is kinda cool, if you ask me. ")
ScrollText(1, 10, 30, 125, "It works well.")
ScrollText(2, 185, 30, 125, "Delta time halved the FPS. No idea why.")
If KeyHit(cbKeySpace) Then num + 1
For i = 1 To 8
ScrollText(2 + i, 185, 50 + 12 * i, 125, "Text #" + (i + num), 60 * (i / 3.0))
Next i
ScrollText(11, 10, 160, 380, "Loop")
Text 10, 50, "FPS: " + FPS()
Text 10, 72, "Hit spacebar To"
Text 10, 84, "increase numbers."
//Text 10, 100,"Delta: " + gDelta
DrawScreen
Forever
UpdateDelta:
_t = Timer()
gDelta = (_t - gLastFrameTime) / 1000.0
gLastFrameTime = _t
Return
// Draws a scrolling text.
// Variables:
// id Unique ID of the text. Can be reused if the old text isn't visible anymore.
// x Top left X-coordinate of the text.
// y Top left Y-coordinate of the text.
// width Width the scrolling text should occupy.
// txt The text to show. Can change at any point.
// speed Pixels to scroll per second. Negative value scrolls to right.
Function ScrollText(id As Integer, x As Integer, y As Integer, width As Integer, txt As String, speed As Float = 60.0)
twidth = TextWidth(txt)
pos# = _gScrollTexts(id) - (speed * gDelta)
//pos# = _gScrollTexts(id) - speed
If speed < 0 And pos >= Max(width, twidth) + 10 Then pos = pos - twidth - 10
If speed > 0 And pos <= -twidth - 10 Then pos = pos + twidth + 10
_gScrollTexts(id) = pos
img = MakeImage(width, TextHeight("|"))
DrawToImage img
Text pos, 0, txt
If speed > 0
For i = 1 To Int(width / twidth) + 1
Text pos + (twidth + 10) * i, 0, txt
Next i
Else
For i = 1 To Int(width / twidth) + 1
Text pos - (twidth + 10) * i, 0, txt
Next i
EndIf
DrawToScreen
DrawImage img, x, y
DeleteImage img
EndFunction
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Codegolf: 99 bottles of beer (oneliner) - Water map partition
- CosmoConsole
- Newcomer
- Posts: 6
- Joined: Mon Dec 02, 2013 8:33 pm
Re: Efektit
Tässäpä hyvin yksinkertainen parallax scrolling efekti, joka tuli väsättyä noin 10 minuutissa.
Code: Select all
SCREEN 640, 240
cx = 0
tides1 = MakeImage(32, 9)
tides2 = MakeImage(32, 10)
tides3 = MakeImage(32, 11)
tides4 = MakeImage(32, 12)
tides5 = MakeImage(32, 13)
tides6 = MakeImage(32, 14)
tides7 = MakeImage(32, 15)
tides8 = MakeImage(32, 16)
bg = MakeImage(640, 240)
Function SeaGradient(yt#)
Color 21+(yt#*122),83+(yt#*118),132+(yt#*73)
EndFunction
DrawToImage bg
For y# = 0 To 239
yt# = (y# / 189)
Color 150+(yt#*57),205+(yt#*31),20+(yt#*232)
Line 0, y, 640, y
Next y#
DrawToImage tides1
For y# = 0 To 8
For x# = 0 To 31
yt# = Rnd(0.0, 0.5)
SeaGradient (yt#)
Dot x,y
Next x#
Next y#
DrawToImage tides2
For y# = 0 To 9
For x# = 0 To 15
yt# = Rnd(0.0, 0.6)
SeaGradient (yt#)
Line x*2,y,(x*2)+1,y
Next x#
Next y#
DrawToImage tides3
For y# = 0 To 10
For x# = 0 To 15
yt# = Rnd(0.0, 0.7)
SeaGradient (yt#)
Line x*2,y,(x*2)+1,y
Next x#
Next y#
DrawToImage tides4
For y# = 0 To 11
For x# = 0 To 15
yt# = Rnd(0.0, 0.81)
SeaGradient (yt#)
Line x*2,y,(x*2)+1,y
Next x#
Next y#
DrawToImage tides5
For y# = 0 To 12
For x# = 0 To 15
yt# = Rnd(0.0, 0.89)
SeaGradient (yt#)
Line x*2,y,(x*2)+1,y
Next x#
Next y#
DrawToImage tides6
For y# = 0 To 13
For x# = 0 To 7
yt# = Rnd(0.0, 0.97)
SeaGradient (yt#)
Line x*4,y,(x*4)+3,y
Next x#
Next y#
DrawToImage tides7
For y# = 0 To 14
For x# = 0 To 7
yt# = Rnd(0.0, 1)
SeaGradient (yt#)
Line x*4,y,(x*4)+3,y
Next x#
Next y#
DrawToImage tides8
For y# = 0 To 15
For x# = 0 To 7
yt# = Rnd(0.0, 1)
SeaGradient (yt#)
Line x*4,y,(x*4)+3,y
Next x#
Next y#
DrawToScreen
'1 2 4 12 16 16 32 64
'/32 /16 /8 (/16)*3 /4 /2 (/4)*3 /1
tx = 83
Repeat
cx = (cx + tx)
DrawImage bg, 0, 0
For x = -64 To 704 Step 32
DrawImage tides1, x + ((cx Mod 8192) / 128), 240 - (16 + 15 + 14 + 13 + 12 + 11 + 10 + 9)
DrawImage tides2, x + ((cx Mod 4096) / 64), 240 - (16 + 15 + 14 + 13 + 12 + 11 + 10)
DrawImage tides3, x + ((cx Mod 2048) / 32), 240 - (16 + 15 + 14 + 13 + 12 + 11)
DrawImage tides4, x + ((cx Mod 1024) / 16), 240 - (16 + 15 + 14 + 13 + 12)
DrawImage tides5, x + ((cx Mod 512) / 8), 240 - (16 + 15 + 14 + 13)
DrawImage tides6, x + ((cx Mod 256) / 4), 240 - (16 + 15 + 14)
DrawImage tides7, x + ((cx Mod 128) / 2), 240 - (16 + 15)
DrawImage tides8, x + ((cx Mod 64)), 240 - (16)
Next x
Text 0, 0, tx
If KeyHit(203) Then tx - 1
If KeyHit(205) Then tx + 1
If KeyDown(1) Then Exit
DrawScreen
Forever
Re: Efektit
Kaippa tätäkin efektiksi voisi kutsua, vaikkakin 3d projektiotahan tässä tavallaan tehdään. Tein tämän erään java-tutoriaalin perusteella, mutta koska CB ei ole paras komennoiltaan eikä nopeudeltaansa varsinkaan, niin en tästä saanut niin hienoa kuitenkaan. Renderöinnissä kestää kauan ja se vie tehoja paljon, sekä bittioperaattoreiden puutteet tekee vähän hassun näköisen. Ohjelma saattaa myös jumittaa konetta joskus, sillä se yrittää käyttää prossua niin paljon (näin ainakin luulisin). Nappia painamalla renderöi uuden kuvan mahdollisesti vähän eri suunnasta. Parannuksia ja virheitä saa ja pitää kertoa, kuuntelen mielelläni
Code: Select all
w = 200
h = 200
SCREEN 400, 400
SCREEN w, h, 0, 2
Dim pixels(w*h) As integer
'Dim zBuffer(w*h) As Float
fPos = 10
cPos = 10
yValue# = 0
z# = 0
depth# = 0
xx# = 0
yy# = 0
xPix = 0
yPix = 0
do:
Lock SCREEN()
rot + 20
cosini = Cos(rot)
sini = Sin(rot)
For y = 0 To h - 1
yValue = (y - h / 2.4) / h
z = cPos / yValue
If yValue < 0 Then z = fPos / -yValue
For x = 0 To w - 1
depth = (x - w / 2.0) / h
depth = depth * z
xx = depth * cosini + z * sini
yy = z * cosini - depth * sini
xPix = Int(xx)
yPix = Int(yy)
'zBuffer(x+y*w) = z
pixels(x+y*w) = (xPix * 16) + (yPix * 16) Shl 8
If z > 400 Then pixels(x+y*w) = 0
PutPixel2 x, y, pixels(x+y*w)
SetWindow Str(y) + " " + Str(x)
Next x
Next y
Unlock SCREEN()
DrawScreen
WaitKey
Goto do
Re: Efektit
Suosittelen heti alkuun poistamaan SetWindow-komennon. Vie nimittäin aika mukavasti potentiaalista laskenta-aikaa. Tuo projektiosi pystyy jostain syystä piirtämään ainoastaan 45 asteen välein, joten rot + 20 on sama vaihtaa rot + 45, jotta joka painalluksella saadaan uusi kuva. Muuta yleistä pientä optimointia myös ja tässä olisi minun lopputulos. En ihan tarkkaan tajua tämän toimintaa, joten siinä kaikki (muutin myös tyyliasun törkeästi itselleni sopivaksi).MessyC wrote:Kaippa tätäkin efektiksi voisi kutsua, vaikkakin 3d projektiotahan tässä tavallaan tehdään. Tein tämän erään java-tutoriaalin perusteella, mutta koska CB ei ole paras komennoiltaan eikä nopeudeltaansa varsinkaan, niin en tästä saanut niin hienoa kuitenkaan. Renderöinnissä kestää kauan ja se vie tehoja paljon, sekä bittioperaattoreiden puutteet tekee vähän hassun näköisen. Ohjelma saattaa myös jumittaa konetta joskus, sillä se yrittää käyttää prossua niin paljon (näin ainakin luulisin). Nappia painamalla renderöi uuden kuvan mahdollisesti vähän eri suunnasta. Parannuksia ja virheitä saa ja pitää kertoa, kuuntelen mielelläni
*snip*
Code: Select all
w = 200
h = 200
SCREEN 400, 400
SCREEN w, h, 0, 2
Dim pixels(w*h) As integer
'Dim zBuffer(w*h) As Float
fPos = 10
cPos# = 10
yValue# = 0
z# = 0
depth# = 0
xx# = 0
yy# = 0
do:
Lock SCREEN()
rot = (rot + 10) Mod 360
cosini# = Cos(rot)
sini# = Sin(rot)
t = Timer()
For y = 0 To h - 1
yValue = (y - h / 2.4) / h
If yValue < 0 Then z = fPos / (-yValue) Else z = cPos / yValue
For x = 0 To w - 1
pix = 0
If z <= 400 Then
depth = ((x - w / 2.0) / h) * z
xx = depth * cosini + z * sini
yy = z * cosini - depth * sini
pix = (xx * 16) + (yy * 16) Shl 8
EndIf
PutPixel2 x, y, pix
Next x
Next y
Unlock SCREEN()
Text 10, 10, rot + " - Took: " + (Timer() - t) + " ms"
DrawScreen
While Timer() - t < 100
Wait 1
Wend
Goto do
EDIT:
Muokkasin koodia, se toimiikin kuten pitää. \o/
EDIT2: Optimisation maximus!
Code: Select all
w = 200
h = 200
SCREEN 400, 400
SCREEN w, h, 0, 2
Dim pixels(w*h) As integer
'Dim zBuffer(w*h) As Float
fPos = 10
cPos# = 10
yValue# = 0
z# = 0
depth# = 0
xx# = 0
yy# = 0
w2# = w / 2.0
h2# = h / 2.4
do:
Lock SCREEN()
rot = (rot + 10) Mod 360
cosini# = Cos(rot)
sini# = Sin(rot)
t = Timer()
For y = 0 To h - 1
yValue = (y - h2) / h
If yValue < 0 Then z = fPos / (-yValue) Else z = cPos / yValue
If z <= 400 Then
sinz# = z * sini
cosz# = z * cosini
div# = h / z // a / b * c == a / (b / c)
For x = 0 To w - 1
depth = (x - w2) / div
PutPixel2 x, y, Int(((depth * cosini + sinz) * 16) + ((cosz - depth * sini) * 16) Shl 8)
Next x
EndIf
Next y
Unlock SCREEN()
Text 10, 10, rot + " - Took: " + (Timer() - t) + " ms"
DrawScreen
While Timer() - t < 100
Wait 1
Wend
Goto do
Last edited by Jani on Fri Mar 21, 2014 8:34 pm, edited 4 times in total.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Re: Efektit
Wou, kiitoksia paljon! CoolBasicilla on jonkin verran tullut koodailtua, mutta hyvin vähän, joten kaikkea en tiedä vielä. En osannut odottaa että SetWindow vie noinkin paljon tehoa ja ylipäätään stabiiliutta - juuri tämän komennon takia ohjelma jumittikin usein. Tulipahan opittua lisää Tämän koitin "portata" edes jotenkin CB:lle, joten koodin ulkoasuun en kiinnittänyt liikaa huomiota, kuten en liikaa optimointiinkaan. Parempaa saan sitten aikaan kun opin enemmän.Jani wrote: Suosittelen heti alkuun poistamaan SetWindow-komennon. Vie nimittäin aika mukavasti potentiaalista laskenta-aikaa. Tuo projektiosi pystyy jostain syystä piirtämään ainoastaan 45 asteen välein, joten rot + 20 on sama vaihtaa rot + 45, jotta joka painalluksella saadaan uusi kuva. Muuta yleistä pientä optimointia myös ja tässä olisi minun lopputulos. En ihan tarkkaan tajua tämän toimintaa, joten siinä kaikki (muutin myös tyyliasun törkeästi itselleni sopivaksi).
EDIT:
Kiitos vielä kerran, kun siistit ja optimoit, Jani!
EDIT 2:
Kokeilin hieman teksturointia, mutta ei ihan toivottua lopputulosta löytynyt.. Latauslinkissä, koska siinä on kuva mukana. Janin ekaa edittiä käytin pohjana.
EDIT 3:
Janin kanssa yhteistyössä tekstuurit korjattu, linkki päivitetty
- Attachments
-
- 3d.rar
- Lisätty kontrollit + opt. - 27.3.
- (971 Bytes) Downloaded 917 times
Re: Efektit
Maailman ensimmäinen Han Solo -zoomeri!
Code: Select all
SCREEN 640, 360
const LINE_COUNT = 354
const POS_X = 0
const POS_Y = 1
dim list(LINE_COUNT, 1) as float
dim list2(LINE_COUNT, 1) as float
list(0, POS_X) = 311.0
list(0, POS_Y) = 5.0
list(1, POS_X) = 364.0
list(1, POS_Y) = 14.0
list(2, POS_X) = 391.0
list(2, POS_Y) = 30.0
list(3, POS_X) = 414.0
list(3, POS_Y) = 60.0
list(4, POS_X) = 434.0
list(4, POS_Y) = 96.0
list(5, POS_X) = 441.0
list(5, POS_Y) = 145.0
list(6, POS_X) = 442.0
list(6, POS_Y) = 188.0
list(7, POS_X) = 428.0
list(7, POS_Y) = 221.0
list(8, POS_X) = 412.0
list(8, POS_Y) = 252.0
list(9, POS_X) = 412.0
list(9, POS_Y) = 269.0
list(10, POS_X) = 408.0
list(10, POS_Y) = 280.0
list(11, POS_X) = 401.0
list(11, POS_Y) = 284.0
list(12, POS_X) = 390.0
list(12, POS_Y) = 287.0
list(13, POS_X) = 385.0
list(13, POS_Y) = 283.0
list(14, POS_X) = -1.0
list(14, POS_Y) = -1.0
list(15, POS_X) = 386.0
list(15, POS_Y) = 279.0
list(16, POS_X) = 393.0
list(16, POS_Y) = 245.0
list(17, POS_X) = 410.0
list(17, POS_Y) = 241.0
list(18, POS_X) = 415.0
list(18, POS_Y) = 224.0
list(19, POS_X) = 416.0
list(19, POS_Y) = 212.0
list(20, POS_X) = 407.0
list(20, POS_Y) = 214.0
list(21, POS_X) = 403.0
list(21, POS_Y) = 221.0
list(22, POS_X) = 400.0
list(22, POS_Y) = 232.0
list(23, POS_X) = 396.0
list(23, POS_Y) = 234.0
list(24, POS_X) = -1.0
list(24, POS_Y) = -1.0
list(25, POS_X) = 392.0
list(25, POS_Y) = 231.0
list(26, POS_X) = 393.0
list(26, POS_Y) = 215.0
list(27, POS_X) = 385.0
list(27, POS_Y) = 201.0
list(28, POS_X) = 383.0
list(28, POS_Y) = 189.0
list(29, POS_X) = 380.0
list(29, POS_Y) = 173.0
list(30, POS_X) = 377.0
list(30, POS_Y) = 125.0
list(31, POS_X) = 369.0
list(31, POS_Y) = 110.0
list(32, POS_X) = 346.0
list(32, POS_Y) = 105.0
list(33, POS_X) = 318.0
list(33, POS_Y) = 114.0
list(34, POS_X) = 288.0
list(34, POS_Y) = 128.0
list(35, POS_X) = 269.0
list(35, POS_Y) = 133.0
list(36, POS_X) = 239.0
list(36, POS_Y) = 129.0
list(37, POS_X) = 222.0
list(37, POS_Y) = 128.0
list(38, POS_X) = 212.0
list(38, POS_Y) = 137.0
list(39, POS_X) = 206.0
list(39, POS_Y) = 154.0
list(40, POS_X) = 204.0
list(40, POS_Y) = 178.0
list(41, POS_X) = 203.0
list(41, POS_Y) = 197.0
list(42, POS_X) = 200.0
list(42, POS_Y) = 211.0
list(43, POS_X) = 203.0
list(43, POS_Y) = 223.0
list(44, POS_X) = 191.0
list(44, POS_Y) = 198.0
list(45, POS_X) = 182.0
list(45, POS_Y) = 199.0
list(46, POS_X) = 177.0
list(46, POS_Y) = 200.0
list(47, POS_X) = 167.0
list(47, POS_Y) = 194.0
list(48, POS_X) = -1.0
list(48, POS_Y) = -1.0
list(49, POS_X) = 167.0
list(49, POS_Y) = 191.0
list(50, POS_X) = 169.0
list(50, POS_Y) = 153.0
list(51, POS_X) = 169.0
list(51, POS_Y) = 125.0
list(52, POS_X) = 177.0
list(52, POS_Y) = 92.0
list(53, POS_X) = 187.0
list(53, POS_Y) = 67.0
list(54, POS_X) = 194.0
list(54, POS_Y) = 56.0
list(55, POS_X) = 211.0
list(55, POS_Y) = 32.0
list(56, POS_X) = 226.0
list(56, POS_Y) = 22.0
list(57, POS_X) = 241.0
list(57, POS_Y) = 15.0
list(58, POS_X) = 265.0
list(58, POS_Y) = 9.0
list(59, POS_X) = 315.0
list(59, POS_Y) = 6.0
list(60, POS_X) = 332.0
list(60, POS_Y) = 7.0
list(61, POS_X) = -1.0
list(61, POS_Y) = -1.0
list(62, POS_X) = 187.0
list(62, POS_Y) = 198.0
list(63, POS_X) = 185.0
list(63, POS_Y) = 214.0
list(64, POS_X) = 188.0
list(64, POS_Y) = 226.0
list(65, POS_X) = 196.0
list(65, POS_Y) = 233.0
list(66, POS_X) = 204.0
list(66, POS_Y) = 236.0
list(67, POS_X) = -1.0
list(67, POS_Y) = -1.0
list(68, POS_X) = 192.0
list(68, POS_Y) = 202.0
list(69, POS_X) = 194.0
list(69, POS_Y) = 219.0
list(70, POS_X) = 202.0
list(70, POS_Y) = 228.0
list(71, POS_X) = -1.0
list(71, POS_Y) = -1.0
list(72, POS_X) = 204.0
list(72, POS_Y) = 240.0
list(73, POS_X) = 206.0
list(73, POS_Y) = 263.0
list(74, POS_X) = 212.0
list(74, POS_Y) = 285.0
list(75, POS_X) = 225.0
list(75, POS_Y) = 305.0
list(76, POS_X) = 236.0
list(76, POS_Y) = 319.0
list(77, POS_X) = 254.0
list(77, POS_Y) = 344.0
list(78, POS_X) = 263.0
list(78, POS_Y) = 352.0
list(79, POS_X) = 278.0
list(79, POS_Y) = 355.0
list(80, POS_X) = 289.0
list(80, POS_Y) = 353.0
list(81, POS_X) = 307.0
list(81, POS_Y) = 356.0
list(82, POS_X) = 324.0
list(82, POS_Y) = 348.0
list(83, POS_X) = 338.0
list(83, POS_Y) = 335.0
list(84, POS_X) = 356.0
list(84, POS_Y) = 320.0
list(85, POS_X) = 372.0
list(85, POS_Y) = 298.0
list(86, POS_X) = 382.0
list(86, POS_Y) = 285.0
list(87, POS_X) = -1.0
list(87, POS_Y) = -1.0
list(88, POS_X) = 250.0
list(88, POS_Y) = 295.0
list(89, POS_X) = 267.0
list(89, POS_Y) = 300.0
list(90, POS_X) = 275.0
list(90, POS_Y) = 299.0
list(91, POS_X) = 283.0
list(91, POS_Y) = 303.0
list(92, POS_X) = 295.0
list(92, POS_Y) = 302.0
list(93, POS_X) = 308.0
list(93, POS_Y) = 303.0
list(94, POS_X) = 327.0
list(94, POS_Y) = 299.0
list(95, POS_X) = 323.0
list(95, POS_Y) = 309.0
list(96, POS_X) = 312.0
list(96, POS_Y) = 317.0
list(97, POS_X) = 289.0
list(97, POS_Y) = 319.0
list(98, POS_X) = 274.0
list(98, POS_Y) = 314.0
list(99, POS_X) = 264.0
list(99, POS_Y) = 308.0
list(100, POS_X) = 251.0
list(100, POS_Y) = 297.0
list(101, POS_X) = -1.0
list(101, POS_Y) = -1.0
list(102, POS_X) = 253.0
list(102, POS_Y) = 294.0
list(103, POS_X) = 265.0
list(103, POS_Y) = 290.0
list(104, POS_X) = 276.0
list(104, POS_Y) = 295.0
list(105, POS_X) = 285.0
list(105, POS_Y) = 297.0
list(106, POS_X) = 297.0
list(106, POS_Y) = 296.0
list(107, POS_X) = 309.0
list(107, POS_Y) = 296.0
list(108, POS_X) = 324.0
list(108, POS_Y) = 299.0
list(109, POS_X) = -1.0
list(109, POS_Y) = -1.0
list(110, POS_X) = 283.0
list(110, POS_Y) = 283.0
list(111, POS_X) = 280.0
list(111, POS_Y) = 290.0
list(112, POS_X) = 283.0
list(112, POS_Y) = 296.0
list(113, POS_X) = -1.0
list(113, POS_Y) = -1.0
list(114, POS_X) = 289.0
list(114, POS_Y) = 283.0
list(115, POS_X) = 294.0
list(115, POS_Y) = 288.0
list(116, POS_X) = 291.0
list(116, POS_Y) = 294.0
list(117, POS_X) = -1.0
list(117, POS_Y) = -1.0
list(118, POS_X) = 321.0
list(118, POS_Y) = 264.0
list(119, POS_X) = 345.0
list(119, POS_Y) = 298.0
list(120, POS_X) = -1.0
list(120, POS_Y) = -1.0
list(121, POS_X) = 262.0
list(121, POS_Y) = 245.0
list(122, POS_X) = 245.0
list(122, POS_Y) = 276.0
list(123, POS_X) = -1.0
list(123, POS_Y) = -1.0
list(124, POS_X) = 301.0
list(124, POS_Y) = 191.0
list(125, POS_X) = 295.0
list(125, POS_Y) = 211.0
list(126, POS_X) = 299.0
list(126, POS_Y) = 234.0
list(127, POS_X) = 308.0
list(127, POS_Y) = 253.0
list(128, POS_X) = 314.0
list(128, POS_Y) = 268.0
list(129, POS_X) = 306.0
list(129, POS_Y) = 273.0
list(130, POS_X) = 297.0
list(130, POS_Y) = 269.0
list(131, POS_X) = 290.0
list(131, POS_Y) = 274.0
list(132, POS_X) = 275.0
list(132, POS_Y) = 275.0
list(133, POS_X) = 268.0
list(133, POS_Y) = 269.0
list(134, POS_X) = 267.0
list(134, POS_Y) = 264.0
list(135, POS_X) = 266.0
list(135, POS_Y) = 258.0
list(136, POS_X) = 271.0
list(136, POS_Y) = 249.0
list(137, POS_X) = 277.0
list(137, POS_Y) = 205.0
list(138, POS_X) = -1.0
list(138, POS_Y) = -1.0
list(139, POS_X) = 316.0
list(139, POS_Y) = 327.0
list(140, POS_X) = 312.0
list(140, POS_Y) = 331.0
list(141, POS_X) = 316.0
list(141, POS_Y) = 333.0
list(142, POS_X) = 321.0
list(142, POS_Y) = 330.0
list(143, POS_X) = 316.0
list(143, POS_Y) = 328.0
list(144, POS_X) = -1.0
list(144, POS_Y) = -1.0
list(145, POS_X) = 265.0
list(145, POS_Y) = 195.0
list(146, POS_X) = 253.0
list(146, POS_Y) = 190.0
list(147, POS_X) = 237.0
list(147, POS_Y) = 192.0
list(148, POS_X) = 229.0
list(148, POS_Y) = 198.0
list(149, POS_X) = 238.0
list(149, POS_Y) = 204.0
list(150, POS_X) = 253.0
list(150, POS_Y) = 204.0
list(151, POS_X) = 264.0
list(151, POS_Y) = 204.0
list(152, POS_X) = 268.0
list(152, POS_Y) = 205.0
list(153, POS_X) = 269.0
list(153, POS_Y) = 198.0
list(154, POS_X) = 266.0
list(154, POS_Y) = 196.0
list(155, POS_X) = -1.0
list(155, POS_Y) = -1.0
list(156, POS_X) = 316.0
list(156, POS_Y) = 203.0
list(157, POS_X) = 324.0
list(157, POS_Y) = 192.0
list(158, POS_X) = 335.0
list(158, POS_Y) = 190.0
list(159, POS_X) = 346.0
list(159, POS_Y) = 192.0
list(160, POS_X) = 358.0
list(160, POS_Y) = 199.0
list(161, POS_X) = 359.0
list(161, POS_Y) = 202.0
list(162, POS_X) = 349.0
list(162, POS_Y) = 205.0
list(163, POS_X) = 339.0
list(163, POS_Y) = 206.0
list(164, POS_X) = 329.0
list(164, POS_Y) = 205.0
list(165, POS_X) = 318.0
list(165, POS_Y) = 204.0
list(166, POS_X) = -1.0
list(166, POS_Y) = -1.0
list(167, POS_X) = 314.0
list(167, POS_Y) = 205.0
list(168, POS_X) = 313.0
list(168, POS_Y) = 211.0
list(169, POS_X) = 323.0
list(169, POS_Y) = 212.0
list(170, POS_X) = 334.0
list(170, POS_Y) = 214.0
list(171, POS_X) = 346.0
list(171, POS_Y) = 211.0
list(172, POS_X) = 360.0
list(172, POS_Y) = 202.0
list(173, POS_X) = -1.0
list(173, POS_Y) = -1.0
list(174, POS_X) = 271.0
list(174, POS_Y) = 205.0
list(175, POS_X) = 271.0
list(175, POS_Y) = 209.0
list(176, POS_X) = 263.0
list(176, POS_Y) = 210.0
list(177, POS_X) = 247.0
list(177, POS_Y) = 211.0
list(178, POS_X) = 234.0
list(178, POS_Y) = 211.0
list(179, POS_X) = 227.0
list(179, POS_Y) = 199.0
list(180, POS_X) = -1.0
list(180, POS_Y) = -1.0
list(181, POS_X) = 267.0
list(181, POS_Y) = 182.0
list(182, POS_X) = 250.0
list(182, POS_Y) = 182.0
list(183, POS_X) = 230.0
list(183, POS_Y) = 181.0
list(184, POS_X) = 220.0
list(184, POS_Y) = 180.0
list(185, POS_X) = 216.0
list(185, POS_Y) = 186.0
list(186, POS_X) = 226.0
list(186, POS_Y) = 189.0
list(187, POS_X) = 256.0
list(187, POS_Y) = 187.0
list(188, POS_X) = 265.0
list(188, POS_Y) = 186.0
list(189, POS_X) = 268.0
list(189, POS_Y) = 181.0
list(190, POS_X) = -1.0
list(190, POS_Y) = -1.0
list(191, POS_X) = 310.0
list(191, POS_Y) = 185.0
list(192, POS_X) = 335.0
list(192, POS_Y) = 179.0
list(193, POS_X) = 351.0
list(193, POS_Y) = 180.0
list(194, POS_X) = 364.0
list(194, POS_Y) = 182.0
list(195, POS_X) = 367.0
list(195, POS_Y) = 189.0
list(196, POS_X) = 361.0
list(196, POS_Y) = 190.0
list(197, POS_X) = 350.0
list(197, POS_Y) = 186.0
list(198, POS_X) = 337.0
list(198, POS_Y) = 186.0
list(199, POS_X) = 325.0
list(199, POS_Y) = 188.0
list(200, POS_X) = 310.0
list(200, POS_Y) = 188.0
list(201, POS_X) = 311.0
list(201, POS_Y) = 183.0
list(202, POS_X) = -1.0
list(202, POS_Y) = -1.0
list(203, POS_X) = 349.0
list(203, POS_Y) = 144.0
list(204, POS_X) = 305.0
list(204, POS_Y) = 149.0
list(205, POS_X) = 295.0
list(205, POS_Y) = 156.0
list(206, POS_X) = 267.0
list(206, POS_Y) = 150.0
list(207, POS_X) = 251.0
list(207, POS_Y) = 153.0
list(208, POS_X) = 236.0
list(208, POS_Y) = 157.0
list(209, POS_X) = -1.0
list(209, POS_Y) = -1.0
list(210, POS_X) = 352.0
list(210, POS_Y) = 158.0
list(211, POS_X) = 323.0
list(211, POS_Y) = 162.0
list(212, POS_X) = 307.0
list(212, POS_Y) = 166.0
list(213, POS_X) = 275.0
list(213, POS_Y) = 166.0
list(214, POS_X) = 251.0
list(214, POS_Y) = 165.0
list(215, POS_X) = 228.0
list(215, POS_Y) = 168.0
list(216, POS_X) = -1.0
list(216, POS_Y) = -1.0
list(217, POS_X) = 386.0
list(217, POS_Y) = 291.0
list(218, POS_X) = 381.0
list(218, POS_Y) = 317.0
list(219, POS_X) = 374.0
list(219, POS_Y) = 339.0
list(220, POS_X) = 366.0
list(220, POS_Y) = 354.0
list(221, POS_X) = -1.0
list(221, POS_Y) = -1.0
list(222, POS_X) = 391.0
list(222, POS_Y) = 296.0
list(223, POS_X) = 388.0
list(223, POS_Y) = 320.0
list(224, POS_X) = 383.0
list(224, POS_Y) = 337.0
list(225, POS_X) = 373.0
list(225, POS_Y) = 356.0
list(226, POS_X) = -1.0
list(226, POS_Y) = -1.0
list(227, POS_X) = 228.0
list(227, POS_Y) = 314.0
list(228, POS_X) = 230.0
list(228, POS_Y) = 334.0
list(229, POS_X) = 244.0
list(229, POS_Y) = 355.0
list(230, POS_X) = -1.0
list(230, POS_Y) = -1.0
list(231, POS_X) = 223.0
list(231, POS_Y) = 314.0
list(232, POS_X) = 223.0
list(232, POS_Y) = 336.0
list(233, POS_X) = 228.0
list(233, POS_Y) = 357.0
list(234, POS_X) = -1.0
list(234, POS_Y) = -1.0
list(235, POS_X) = 205.0
list(235, POS_Y) = 271.0
list(236, POS_X) = 153.0
list(236, POS_Y) = 297.0
list(237, POS_X) = 95.0
list(237, POS_Y) = 323.0
list(238, POS_X) = 84.0
list(238, POS_Y) = 354.0
list(239, POS_X) = -1.0
list(239, POS_Y) = -1.0
list(240, POS_X) = 93.0
list(240, POS_Y) = 322.0
list(241, POS_X) = 67.0
list(241, POS_Y) = 340.0
list(242, POS_X) = 57.0
list(242, POS_Y) = 356.0
list(243, POS_X) = -1.0
list(243, POS_Y) = -1.0
list(244, POS_X) = 413.0
list(244, POS_Y) = 267.0
list(245, POS_X) = 465.0
list(245, POS_Y) = 300.0
list(246, POS_X) = 518.0
list(246, POS_Y) = 312.0
list(247, POS_X) = 527.0
list(247, POS_Y) = 322.0
list(248, POS_X) = 536.0
list(248, POS_Y) = 353.0
list(249, POS_X) = -1.0
list(249, POS_Y) = -1.0
list(250, POS_X) = 202.0
list(250, POS_Y) = 239.0
list(251, POS_X) = 189.0
list(251, POS_Y) = 241.0
list(252, POS_X) = 184.0
list(252, POS_Y) = 235.0
list(253, POS_X) = 182.0
list(253, POS_Y) = 221.0
list(254, POS_X) = 183.0
list(254, POS_Y) = 216.0
list(255, POS_X) = -1.0
list(255, POS_Y) = -1.0
list(256, POS_X) = 202.0
list(256, POS_Y) = 244.0
list(257, POS_X) = 194.0
list(257, POS_Y) = 252.0
list(258, POS_X) = 198.0
list(258, POS_Y) = 260.0
list(259, POS_X) = 203.0
list(259, POS_Y) = 268.0
list(260, POS_X) = -1.0
list(260, POS_Y) = -1.0
list(261, POS_X) = 301.0
list(261, POS_Y) = 78.0
list(262, POS_X) = 281.0
list(262, POS_Y) = 87.0
list(263, POS_X) = 256.0
list(263, POS_Y) = 86.0
list(264, POS_X) = 239.0
list(264, POS_Y) = 85.0
list(265, POS_X) = 209.0
list(265, POS_Y) = 105.0
list(266, POS_X) = -1.0
list(266, POS_Y) = -1.0
list(267, POS_X) = 296.0
list(267, POS_Y) = 75.0
list(268, POS_X) = 271.0
list(268, POS_Y) = 81.0
list(269, POS_X) = 244.0
list(269, POS_Y) = 78.0
list(270, POS_X) = 220.0
list(270, POS_Y) = 90.0
list(271, POS_X) = 210.0
list(271, POS_Y) = 97.0
list(272, POS_X) = -1.0
list(272, POS_Y) = -1.0
list(273, POS_X) = 327.0
list(273, POS_Y) = 46.0
list(274, POS_X) = 349.0
list(274, POS_Y) = 44.0
list(275, POS_X) = 370.0
list(275, POS_Y) = 51.0
list(276, POS_X) = 392.0
list(276, POS_Y) = 67.0
list(277, POS_X) = -1.0
list(277, POS_Y) = -1.0
list(278, POS_X) = 331.0
list(278, POS_Y) = 37.0
list(279, POS_X) = 347.0
list(279, POS_Y) = 32.0
list(280, POS_X) = 366.0
list(280, POS_Y) = 39.0
list(281, POS_X) = 395.0
list(281, POS_Y) = 55.0
list(282, POS_X) = -1.0
list(282, POS_Y) = -1.0
list(283, POS_X) = 349.0
list(283, POS_Y) = 49.0
list(284, POS_X) = 369.0
list(284, POS_Y) = 64.0
list(285, POS_X) = -1.0
list(285, POS_Y) = -1.0
list(286, POS_X) = 353.0
list(286, POS_Y) = 78.0
list(287, POS_X) = 382.0
list(287, POS_Y) = 89.0
list(288, POS_X) = 401.0
list(288, POS_Y) = 104.0
list(289, POS_X) = 411.0
list(289, POS_Y) = 122.0
list(290, POS_X) = -1.0
list(290, POS_Y) = -1.0
list(291, POS_X) = 213.0
list(291, POS_Y) = 69.0
list(292, POS_X) = 204.0
list(292, POS_Y) = 80.0
list(293, POS_X) = -1.0
list(293, POS_Y) = -1.0
list(294, POS_X) = 207.0
list(294, POS_Y) = 63.0
list(295, POS_X) = 196.0
list(295, POS_Y) = 70.0
list(296, POS_X) = -1.0
list(296, POS_Y) = -1.0
list(297, POS_X) = 202.0
list(297, POS_Y) = 94.0
list(298, POS_X) = 189.0
list(298, POS_Y) = 106.0
list(299, POS_X) = -1.0
list(299, POS_Y) = -1.0
list(300, POS_X) = 182.0
list(300, POS_Y) = 129.0
list(301, POS_X) = 178.0
list(301, POS_Y) = 142.0
list(302, POS_X) = -1.0
list(302, POS_Y) = -1.0
list(303, POS_X) = 316.0
list(303, POS_Y) = 27.0
list(304, POS_X) = 327.0
list(304, POS_Y) = 18.0
list(305, POS_X) = 338.0
list(305, POS_Y) = 16.0
list(306, POS_X) = 360.0
list(306, POS_Y) = 17.0
list(307, POS_X) = 372.0
list(307, POS_Y) = 26.0
list(308, POS_X) = -1.0
list(308, POS_Y) = -1.0
list(309, POS_X) = 328.0
list(309, POS_Y) = 26.0
list(310, POS_X) = 342.0
list(310, POS_Y) = 23.0
list(311, POS_X) = 365.0
list(311, POS_Y) = 28.0
list(312, POS_X) = 375.0
list(312, POS_Y) = 35.0
list(313, POS_X) = -1.0
list(313, POS_Y) = -1.0
list(314, POS_X) = 386.0
list(314, POS_Y) = 115.0
list(315, POS_X) = 405.0
list(315, POS_Y) = 143.0
list(316, POS_X) = -1.0
list(316, POS_Y) = -1.0
list(317, POS_X) = 386.0
list(317, POS_Y) = 142.0
list(318, POS_X) = 391.0
list(318, POS_Y) = 153.0
list(319, POS_X) = 384.0
list(319, POS_Y) = 154.0
list(320, POS_X) = 386.0
list(320, POS_Y) = 144.0
list(321, POS_X) = -1.0
list(321, POS_Y) = -1.0
list(322, POS_X) = 415.0
list(322, POS_Y) = 162.0
list(323, POS_X) = -1.0
list(323, POS_Y) = -1.0
list(324, POS_X) = 428.0
list(324, POS_Y) = 185.0
list(325, POS_X) = 426.0
list(325, POS_Y) = 202.0
list(326, POS_X) = -1.0
list(326, POS_Y) = -1.0
list(327, POS_X) = 347.0
list(327, POS_Y) = 62.0
list(328, POS_X) = 357.0
list(328, POS_Y) = 67.0
list(329, POS_X) = -1.0
list(329, POS_Y) = -1.0
list(330, POS_X) = 245.0
list(330, POS_Y) = 32.0
list(331, POS_X) = 230.0
list(331, POS_Y) = 45.0
list(332, POS_X) = -1.0
list(332, POS_Y) = -1.0
list(333, POS_X) = 232.0
list(333, POS_Y) = 55.0
list(334, POS_X) = 225.0
list(334, POS_Y) = 63.0
list(335, POS_X) = -1.0
list(335, POS_Y) = -1.0
list(336, POS_X) = 225.0
list(336, POS_Y) = 58.0
list(337, POS_X) = 204.0
list(337, POS_Y) = 82.0
list(338, POS_X) = -1.0
list(338, POS_Y) = -1.0
list(339, POS_X) = 225.0
list(339, POS_Y) = 29.0
list(340, POS_X) = 211.0
list(340, POS_Y) = 46.0
list(341, POS_X) = -1.0
list(341, POS_Y) = -1.0
list(342, POS_X) = 197.0
list(342, POS_Y) = 156.0
list(343, POS_X) = 192.0
list(343, POS_Y) = 170.0
list(344, POS_X) = -1.0
list(344, POS_Y) = -1.0
list(345, POS_X) = 400.0
list(345, POS_Y) = 73.0
list(346, POS_X) = 414.0
list(346, POS_Y) = 93.0
list(347, POS_X) = -1.0
list(347, POS_Y) = -1.0
list(348, POS_X) = 318.0
list(348, POS_Y) = 199.0
list(349, POS_X) = 312.0
list(349, POS_Y) = 201.0
list(350, POS_X) = 316.0
list(350, POS_Y) = 203.0
list(351, POS_X) = -1.0
list(351, POS_Y) = -1.0
list(352, POS_X) = 264.0
list(352, POS_Y) = 199.0
list(353, POS_X) = 259.0
list(353, POS_Y) = 203.0
list(354, POS_X) = -1.0
list(354, POS_Y) = -1.0
'img = loadImage("hansolo.jpg")
'f = openToEdit("fug.txt")
'seekFile f, fileSize("fug.txt")
speed = 15 // fps = 15
frames = speed * 10 // 10 seconds
frameLimit speed
global f_ofs_x as float
global f_ofs_y as float
f_ofs_x = -248.0
f_ofs_y = -198.0
dim eyes(1, 1) as float
eyes(0, 0) = 248' + f_ofs_x
eyes(0, 1) = 198' + f_ofs_y
eyes(1, 0) = 335' + f_ofs_x
eyes(1, 1) = 198' + f_ofs_y
start = timer()
frame = 0
ind = 0
img_y = 15
function draw(xx#, yy#, s#, iter)
if iter <= 0 then return 0
for i = 0 to LINE_COUNT
r = 1
x1# = list(i, POS_X)
y1# = list(i, POS_Y)
list2(i, POS_X) = x1'+ rand(-r, r)
list2(i, POS_Y) = y1 '+ rand(-r, r)
if x1 <> -1 and y1 <> -1 then
list2(i, POS_X) = (x1+ rand(-r, r) + f_ofs_x)*s + xx
list2(i, POS_Y) = (y1+ rand(-r, r) +f_ofs_y)*s + yy
endif
next i
if iter mod 2 = 0 then
color 255,0,0
else
color 255,255,255
endif
for i = 1 to LINE_COUNT
x1# = list2(i, POS_X)
y1# = list2(i, POS_Y)
x2# = list2(i+1, POS_X)
y2# = list2(i+1, POS_Y)
if (x2 <> -1 and y2 <> -1) and (x1 <> -1 and y2 <> -1) then
line x1, y1, x2, y2
endif
next i
for i = 0 to 1
ex# = (eyes(i, 0) + f_ofs_x)*s + xx
ey# = (eyes(i, 1) + f_ofs_y)*s + yy
draw(ex, ey, 0.03*s, iter-1)
'box ex,ey , 8,8,1
next i
endFunction
frames = 63
scale# = 1.0
temp = makeImage(screenWidth(), screenHeight())
repeat
//drawImage img, 0, img_y
'453 167
mx# = mouseX()
my# = mouseY()
'scale = scale + mouseMoveZ()*scale*0.1
scale = 2.0^(frame*0.16)
f_ofs_x = f_ofs_x + (-leftKey() + rightKey())*0.1
f_ofs_y = f_ofs_y + (-upKey() + downKey())*0.1
'drawToImage temp
'color 0,0,0
'box 0,0,imageWidth(temp), imageHeight(temp), 1
draw(453, 167, scale, 4)
'drawToScreen
'text 0,0,frame
'text 0,12,(timer()-start) / 1000.0
'text 0,24, ind + ": " + mx + ", "+ my
'text 0,36, f_ofs_x + ", " + f_ofs_y
drawScreen
'setWindow "FPS " + FPS()
'wait roundDown((1.0 / speed) * 1000)
'saveImage temp, "frames/kuva" + frame + ".bmp"
'if frame=frames-1 then end
frame = (frame + 1) mod frames
REMSTART
drawToImage img
if mouseHit(1) or mouseHit(2) then
if mouseHit(2) then
mx = -1
my = -1
endif
writeLine f, "("+ind+", POS_X) = " + mx
writeLine f, "("+ind+", POS_Y) = " + my
ind = ind + 1
if mx <> -1 and my <> -1 and ind > 0 then
line old_x#, old_y# - img_y, mx, my - img_y
endif
old_x# = mx
old_y# = my
endif
drawToScreen
if keyHit(cbKeySpace) then
closeFile(f)
endif
REMEND
forever
Last edited by CCE on Wed Apr 08, 2015 11:59 pm, edited 1 time in total.
Re: Efektit
Sijoititko kyseiset kordinaattilukuarvot ihan puhtaasti päästäsi?CCE wrote:Maailman ensimmäinen Han Solo -zoomeri!Code: Select all
SCREEN 640, 360 const LINE_COUNT = 354 const POS_X = 0 const POS_Y = 1 dim list(LINE_COUNT, 1) as float dim list2(LINE_COUNT, 1) as float list(0, POS_X) = 311.0 list(0, POS_Y) = 5.0 list(1, POS_X) = 364.0 list(1, POS_Y) = 14.0 list(2, POS_X) = 391.0 list(2, POS_Y) = 30.0 list(3, POS_X) = 414.0 list(3, POS_Y) = 60.0 list(4, POS_X) = 434.0 list(4, POS_Y) = 96.0 list(5, POS_X) = 441.0 list(5, POS_Y) = 145.0 list(6, POS_X) = 442.0 list(6, POS_Y) = 188.0 list(7, POS_X) = 428.0 list(7, POS_Y) = 221.0 list(8, POS_X) = 412.0 list(8, POS_Y) = 252.0 list(9, POS_X) = 412.0 list(9, POS_Y) = 269.0 list(10, POS_X) = 408.0 list(10, POS_Y) = 280.0 list(11, POS_X) = 401.0 list(11, POS_Y) = 284.0 list(12, POS_X) = 390.0 list(12, POS_Y) = 287.0 list(13, POS_X) = 385.0 list(13, POS_Y) = 283.0 list(14, POS_X) = -1.0 list(14, POS_Y) = -1.0 list(15, POS_X) = 386.0 list(15, POS_Y) = 279.0 list(16, POS_X) = 393.0 list(16, POS_Y) = 245.0 list(17, POS_X) = 410.0 list(17, POS_Y) = 241.0 list(18, POS_X) = 415.0 list(18, POS_Y) = 224.0 list(19, POS_X) = 416.0 list(19, POS_Y) = 212.0 list(20, POS_X) = 407.0 list(20, POS_Y) = 214.0 list(21, POS_X) = 403.0 list(21, POS_Y) = 221.0 list(22, POS_X) = 400.0 list(22, POS_Y) = 232.0 list(23, POS_X) = 396.0 list(23, POS_Y) = 234.0 list(24, POS_X) = -1.0 list(24, POS_Y) = -1.0 list(25, POS_X) = 392.0 list(25, POS_Y) = 231.0 list(26, POS_X) = 393.0 list(26, POS_Y) = 215.0 list(27, POS_X) = 385.0 list(27, POS_Y) = 201.0 list(28, POS_X) = 383.0 list(28, POS_Y) = 189.0 list(29, POS_X) = 380.0 list(29, POS_Y) = 173.0 list(30, POS_X) = 377.0 list(30, POS_Y) = 125.0 list(31, POS_X) = 369.0 list(31, POS_Y) = 110.0 list(32, POS_X) = 346.0 list(32, POS_Y) = 105.0 list(33, POS_X) = 318.0 list(33, POS_Y) = 114.0 list(34, POS_X) = 288.0 list(34, POS_Y) = 128.0 list(35, POS_X) = 269.0 list(35, POS_Y) = 133.0 list(36, POS_X) = 239.0 list(36, POS_Y) = 129.0 list(37, POS_X) = 222.0 list(37, POS_Y) = 128.0 list(38, POS_X) = 212.0 list(38, POS_Y) = 137.0 list(39, POS_X) = 206.0 list(39, POS_Y) = 154.0 list(40, POS_X) = 204.0 list(40, POS_Y) = 178.0 list(41, POS_X) = 203.0 list(41, POS_Y) = 197.0 list(42, POS_X) = 200.0 list(42, POS_Y) = 211.0 list(43, POS_X) = 203.0 list(43, POS_Y) = 223.0 list(44, POS_X) = 191.0 list(44, POS_Y) = 198.0 list(45, POS_X) = 182.0 list(45, POS_Y) = 199.0 list(46, POS_X) = 177.0 list(46, POS_Y) = 200.0 list(47, POS_X) = 167.0 list(47, POS_Y) = 194.0 list(48, POS_X) = -1.0 list(48, POS_Y) = -1.0 list(49, POS_X) = 167.0 list(49, POS_Y) = 191.0 list(50, POS_X) = 169.0 list(50, POS_Y) = 153.0 list(51, POS_X) = 169.0 list(51, POS_Y) = 125.0 list(52, POS_X) = 177.0 list(52, POS_Y) = 92.0 list(53, POS_X) = 187.0 list(53, POS_Y) = 67.0 list(54, POS_X) = 194.0 list(54, POS_Y) = 56.0 list(55, POS_X) = 211.0 list(55, POS_Y) = 32.0 list(56, POS_X) = 226.0 list(56, POS_Y) = 22.0 list(57, POS_X) = 241.0 list(57, POS_Y) = 15.0 list(58, POS_X) = 265.0 list(58, POS_Y) = 9.0 list(59, POS_X) = 315.0 list(59, POS_Y) = 6.0 list(60, POS_X) = 332.0 list(60, POS_Y) = 7.0 list(61, POS_X) = -1.0 list(61, POS_Y) = -1.0 list(62, POS_X) = 187.0 list(62, POS_Y) = 198.0 list(63, POS_X) = 185.0 list(63, POS_Y) = 214.0 list(64, POS_X) = 188.0 list(64, POS_Y) = 226.0 list(65, POS_X) = 196.0 list(65, POS_Y) = 233.0 list(66, POS_X) = 204.0 list(66, POS_Y) = 236.0 list(67, POS_X) = -1.0 list(67, POS_Y) = -1.0 list(68, POS_X) = 192.0 list(68, POS_Y) = 202.0 list(69, POS_X) = 194.0 list(69, POS_Y) = 219.0 list(70, POS_X) = 202.0 list(70, POS_Y) = 228.0 list(71, POS_X) = -1.0 list(71, POS_Y) = -1.0 list(72, POS_X) = 204.0 list(72, POS_Y) = 240.0 list(73, POS_X) = 206.0 list(73, POS_Y) = 263.0 list(74, POS_X) = 212.0 list(74, POS_Y) = 285.0 list(75, POS_X) = 225.0 list(75, POS_Y) = 305.0 list(76, POS_X) = 236.0 list(76, POS_Y) = 319.0 list(77, POS_X) = 254.0 list(77, POS_Y) = 344.0 list(78, POS_X) = 263.0 list(78, POS_Y) = 352.0 list(79, POS_X) = 278.0 list(79, POS_Y) = 355.0 list(80, POS_X) = 289.0 list(80, POS_Y) = 353.0 list(81, POS_X) = 307.0 list(81, POS_Y) = 356.0 list(82, POS_X) = 324.0 list(82, POS_Y) = 348.0 list(83, POS_X) = 338.0 list(83, POS_Y) = 335.0 list(84, POS_X) = 356.0 list(84, POS_Y) = 320.0 list(85, POS_X) = 372.0 list(85, POS_Y) = 298.0 list(86, POS_X) = 382.0 list(86, POS_Y) = 285.0 list(87, POS_X) = -1.0 list(87, POS_Y) = -1.0 list(88, POS_X) = 250.0 list(88, POS_Y) = 295.0 list(89, POS_X) = 267.0 list(89, POS_Y) = 300.0 list(90, POS_X) = 275.0 list(90, POS_Y) = 299.0 list(91, POS_X) = 283.0 list(91, POS_Y) = 303.0 list(92, POS_X) = 295.0 list(92, POS_Y) = 302.0 list(93, POS_X) = 308.0 list(93, POS_Y) = 303.0 list(94, POS_X) = 327.0 list(94, POS_Y) = 299.0 list(95, POS_X) = 323.0 list(95, POS_Y) = 309.0 list(96, POS_X) = 312.0 list(96, POS_Y) = 317.0 list(97, POS_X) = 289.0 list(97, POS_Y) = 319.0 list(98, POS_X) = 274.0 list(98, POS_Y) = 314.0 list(99, POS_X) = 264.0 list(99, POS_Y) = 308.0 list(100, POS_X) = 251.0 list(100, POS_Y) = 297.0 list(101, POS_X) = -1.0 list(101, POS_Y) = -1.0 list(102, POS_X) = 253.0 list(102, POS_Y) = 294.0 list(103, POS_X) = 265.0 list(103, POS_Y) = 290.0 list(104, POS_X) = 276.0 list(104, POS_Y) = 295.0 list(105, POS_X) = 285.0 list(105, POS_Y) = 297.0 list(106, POS_X) = 297.0 list(106, POS_Y) = 296.0 list(107, POS_X) = 309.0 list(107, POS_Y) = 296.0 list(108, POS_X) = 324.0 list(108, POS_Y) = 299.0 list(109, POS_X) = -1.0 list(109, POS_Y) = -1.0 list(110, POS_X) = 283.0 list(110, POS_Y) = 283.0 list(111, POS_X) = 280.0 list(111, POS_Y) = 290.0 list(112, POS_X) = 283.0 list(112, POS_Y) = 296.0 list(113, POS_X) = -1.0 list(113, POS_Y) = -1.0 list(114, POS_X) = 289.0 list(114, POS_Y) = 283.0 list(115, POS_X) = 294.0 list(115, POS_Y) = 288.0 list(116, POS_X) = 291.0 list(116, POS_Y) = 294.0 list(117, POS_X) = -1.0 list(117, POS_Y) = -1.0 list(118, POS_X) = 321.0 list(118, POS_Y) = 264.0 list(119, POS_X) = 345.0 list(119, POS_Y) = 298.0 list(120, POS_X) = -1.0 list(120, POS_Y) = -1.0 list(121, POS_X) = 262.0 list(121, POS_Y) = 245.0 list(122, POS_X) = 245.0 list(122, POS_Y) = 276.0 list(123, POS_X) = -1.0 list(123, POS_Y) = -1.0 list(124, POS_X) = 301.0 list(124, POS_Y) = 191.0 list(125, POS_X) = 295.0 list(125, POS_Y) = 211.0 list(126, POS_X) = 299.0 list(126, POS_Y) = 234.0 list(127, POS_X) = 308.0 list(127, POS_Y) = 253.0 list(128, POS_X) = 314.0 list(128, POS_Y) = 268.0 list(129, POS_X) = 306.0 list(129, POS_Y) = 273.0 list(130, POS_X) = 297.0 list(130, POS_Y) = 269.0 list(131, POS_X) = 290.0 list(131, POS_Y) = 274.0 list(132, POS_X) = 275.0 list(132, POS_Y) = 275.0 list(133, POS_X) = 268.0 list(133, POS_Y) = 269.0 list(134, POS_X) = 267.0 list(134, POS_Y) = 264.0 list(135, POS_X) = 266.0 list(135, POS_Y) = 258.0 list(136, POS_X) = 271.0 list(136, POS_Y) = 249.0 list(137, POS_X) = 277.0 list(137, POS_Y) = 205.0 list(138, POS_X) = -1.0 list(138, POS_Y) = -1.0 list(139, POS_X) = 316.0 list(139, POS_Y) = 327.0 list(140, POS_X) = 312.0 list(140, POS_Y) = 331.0 list(141, POS_X) = 316.0 list(141, POS_Y) = 333.0 list(142, POS_X) = 321.0 list(142, POS_Y) = 330.0 list(143, POS_X) = 316.0 list(143, POS_Y) = 328.0 list(144, POS_X) = -1.0 list(144, POS_Y) = -1.0 list(145, POS_X) = 265.0 list(145, POS_Y) = 195.0 list(146, POS_X) = 253.0 list(146, POS_Y) = 190.0 list(147, POS_X) = 237.0 list(147, POS_Y) = 192.0 list(148, POS_X) = 229.0 list(148, POS_Y) = 198.0 list(149, POS_X) = 238.0 list(149, POS_Y) = 204.0 list(150, POS_X) = 253.0 list(150, POS_Y) = 204.0 list(151, POS_X) = 264.0 list(151, POS_Y) = 204.0 list(152, POS_X) = 268.0 list(152, POS_Y) = 205.0 list(153, POS_X) = 269.0 list(153, POS_Y) = 198.0 list(154, POS_X) = 266.0 list(154, POS_Y) = 196.0 list(155, POS_X) = -1.0 list(155, POS_Y) = -1.0 list(156, POS_X) = 316.0 list(156, POS_Y) = 203.0 list(157, POS_X) = 324.0 list(157, POS_Y) = 192.0 list(158, POS_X) = 335.0 list(158, POS_Y) = 190.0 list(159, POS_X) = 346.0 list(159, POS_Y) = 192.0 list(160, POS_X) = 358.0 list(160, POS_Y) = 199.0 list(161, POS_X) = 359.0 list(161, POS_Y) = 202.0 list(162, POS_X) = 349.0 list(162, POS_Y) = 205.0 list(163, POS_X) = 339.0 list(163, POS_Y) = 206.0 list(164, POS_X) = 329.0 list(164, POS_Y) = 205.0 list(165, POS_X) = 318.0 list(165, POS_Y) = 204.0 list(166, POS_X) = -1.0 list(166, POS_Y) = -1.0 list(167, POS_X) = 314.0 list(167, POS_Y) = 205.0 list(168, POS_X) = 313.0 list(168, POS_Y) = 211.0 list(169, POS_X) = 323.0 list(169, POS_Y) = 212.0 list(170, POS_X) = 334.0 list(170, POS_Y) = 214.0 list(171, POS_X) = 346.0 list(171, POS_Y) = 211.0 list(172, POS_X) = 360.0 list(172, POS_Y) = 202.0 list(173, POS_X) = -1.0 list(173, POS_Y) = -1.0 list(174, POS_X) = 271.0 list(174, POS_Y) = 205.0 list(175, POS_X) = 271.0 list(175, POS_Y) = 209.0 list(176, POS_X) = 263.0 list(176, POS_Y) = 210.0 list(177, POS_X) = 247.0 list(177, POS_Y) = 211.0 list(178, POS_X) = 234.0 list(178, POS_Y) = 211.0 list(179, POS_X) = 227.0 list(179, POS_Y) = 199.0 list(180, POS_X) = -1.0 list(180, POS_Y) = -1.0 list(181, POS_X) = 267.0 list(181, POS_Y) = 182.0 list(182, POS_X) = 250.0 list(182, POS_Y) = 182.0 list(183, POS_X) = 230.0 list(183, POS_Y) = 181.0 list(184, POS_X) = 220.0 list(184, POS_Y) = 180.0 list(185, POS_X) = 216.0 list(185, POS_Y) = 186.0 list(186, POS_X) = 226.0 list(186, POS_Y) = 189.0 list(187, POS_X) = 256.0 list(187, POS_Y) = 187.0 list(188, POS_X) = 265.0 list(188, POS_Y) = 186.0 list(189, POS_X) = 268.0 list(189, POS_Y) = 181.0 list(190, POS_X) = -1.0 list(190, POS_Y) = -1.0 list(191, POS_X) = 310.0 list(191, POS_Y) = 185.0 list(192, POS_X) = 335.0 list(192, POS_Y) = 179.0 list(193, POS_X) = 351.0 list(193, POS_Y) = 180.0 list(194, POS_X) = 364.0 list(194, POS_Y) = 182.0 list(195, POS_X) = 367.0 list(195, POS_Y) = 189.0 list(196, POS_X) = 361.0 list(196, POS_Y) = 190.0 list(197, POS_X) = 350.0 list(197, POS_Y) = 186.0 list(198, POS_X) = 337.0 list(198, POS_Y) = 186.0 list(199, POS_X) = 325.0 list(199, POS_Y) = 188.0 list(200, POS_X) = 310.0 list(200, POS_Y) = 188.0 list(201, POS_X) = 311.0 list(201, POS_Y) = 183.0 list(202, POS_X) = -1.0 list(202, POS_Y) = -1.0 list(203, POS_X) = 349.0 list(203, POS_Y) = 144.0 list(204, POS_X) = 305.0 list(204, POS_Y) = 149.0 list(205, POS_X) = 295.0 list(205, POS_Y) = 156.0 list(206, POS_X) = 267.0 list(206, POS_Y) = 150.0 list(207, POS_X) = 251.0 list(207, POS_Y) = 153.0 list(208, POS_X) = 236.0 list(208, POS_Y) = 157.0 list(209, POS_X) = -1.0 list(209, POS_Y) = -1.0 list(210, POS_X) = 352.0 list(210, POS_Y) = 158.0 list(211, POS_X) = 323.0 list(211, POS_Y) = 162.0 list(212, POS_X) = 307.0 list(212, POS_Y) = 166.0 list(213, POS_X) = 275.0 list(213, POS_Y) = 166.0 list(214, POS_X) = 251.0 list(214, POS_Y) = 165.0 list(215, POS_X) = 228.0 list(215, POS_Y) = 168.0 list(216, POS_X) = -1.0 list(216, POS_Y) = -1.0 list(217, POS_X) = 386.0 list(217, POS_Y) = 291.0 list(218, POS_X) = 381.0 list(218, POS_Y) = 317.0 list(219, POS_X) = 374.0 list(219, POS_Y) = 339.0 list(220, POS_X) = 366.0 list(220, POS_Y) = 354.0 list(221, POS_X) = -1.0 list(221, POS_Y) = -1.0 list(222, POS_X) = 391.0 list(222, POS_Y) = 296.0 list(223, POS_X) = 388.0 list(223, POS_Y) = 320.0 list(224, POS_X) = 383.0 list(224, POS_Y) = 337.0 list(225, POS_X) = 373.0 list(225, POS_Y) = 356.0 list(226, POS_X) = -1.0 list(226, POS_Y) = -1.0 list(227, POS_X) = 228.0 list(227, POS_Y) = 314.0 list(228, POS_X) = 230.0 list(228, POS_Y) = 334.0 list(229, POS_X) = 244.0 list(229, POS_Y) = 355.0 list(230, POS_X) = -1.0 list(230, POS_Y) = -1.0 list(231, POS_X) = 223.0 list(231, POS_Y) = 314.0 list(232, POS_X) = 223.0 list(232, POS_Y) = 336.0 list(233, POS_X) = 228.0 list(233, POS_Y) = 357.0 list(234, POS_X) = -1.0 list(234, POS_Y) = -1.0 list(235, POS_X) = 205.0 list(235, POS_Y) = 271.0 list(236, POS_X) = 153.0 list(236, POS_Y) = 297.0 list(237, POS_X) = 95.0 list(237, POS_Y) = 323.0 list(238, POS_X) = 84.0 list(238, POS_Y) = 354.0 list(239, POS_X) = -1.0 list(239, POS_Y) = -1.0 list(240, POS_X) = 93.0 list(240, POS_Y) = 322.0 list(241, POS_X) = 67.0 list(241, POS_Y) = 340.0 list(242, POS_X) = 57.0 list(242, POS_Y) = 356.0 list(243, POS_X) = -1.0 list(243, POS_Y) = -1.0 list(244, POS_X) = 413.0 list(244, POS_Y) = 267.0 list(245, POS_X) = 465.0 list(245, POS_Y) = 300.0 list(246, POS_X) = 518.0 list(246, POS_Y) = 312.0 list(247, POS_X) = 527.0 list(247, POS_Y) = 322.0 list(248, POS_X) = 536.0 list(248, POS_Y) = 353.0 list(249, POS_X) = -1.0 list(249, POS_Y) = -1.0 list(250, POS_X) = 202.0 list(250, POS_Y) = 239.0 list(251, POS_X) = 189.0 list(251, POS_Y) = 241.0 list(252, POS_X) = 184.0 list(252, POS_Y) = 235.0 list(253, POS_X) = 182.0 list(253, POS_Y) = 221.0 list(254, POS_X) = 183.0 list(254, POS_Y) = 216.0 list(255, POS_X) = -1.0 list(255, POS_Y) = -1.0 list(256, POS_X) = 202.0 list(256, POS_Y) = 244.0 list(257, POS_X) = 194.0 list(257, POS_Y) = 252.0 list(258, POS_X) = 198.0 list(258, POS_Y) = 260.0 list(259, POS_X) = 203.0 list(259, POS_Y) = 268.0 list(260, POS_X) = -1.0 list(260, POS_Y) = -1.0 list(261, POS_X) = 301.0 list(261, POS_Y) = 78.0 list(262, POS_X) = 281.0 list(262, POS_Y) = 87.0 list(263, POS_X) = 256.0 list(263, POS_Y) = 86.0 list(264, POS_X) = 239.0 list(264, POS_Y) = 85.0 list(265, POS_X) = 209.0 list(265, POS_Y) = 105.0 list(266, POS_X) = -1.0 list(266, POS_Y) = -1.0 list(267, POS_X) = 296.0 list(267, POS_Y) = 75.0 list(268, POS_X) = 271.0 list(268, POS_Y) = 81.0 list(269, POS_X) = 244.0 list(269, POS_Y) = 78.0 list(270, POS_X) = 220.0 list(270, POS_Y) = 90.0 list(271, POS_X) = 210.0 list(271, POS_Y) = 97.0 list(272, POS_X) = -1.0 list(272, POS_Y) = -1.0 list(273, POS_X) = 327.0 list(273, POS_Y) = 46.0 list(274, POS_X) = 349.0 list(274, POS_Y) = 44.0 list(275, POS_X) = 370.0 list(275, POS_Y) = 51.0 list(276, POS_X) = 392.0 list(276, POS_Y) = 67.0 list(277, POS_X) = -1.0 list(277, POS_Y) = -1.0 list(278, POS_X) = 331.0 list(278, POS_Y) = 37.0 list(279, POS_X) = 347.0 list(279, POS_Y) = 32.0 list(280, POS_X) = 366.0 list(280, POS_Y) = 39.0 list(281, POS_X) = 395.0 list(281, POS_Y) = 55.0 list(282, POS_X) = -1.0 list(282, POS_Y) = -1.0 list(283, POS_X) = 349.0 list(283, POS_Y) = 49.0 list(284, POS_X) = 369.0 list(284, POS_Y) = 64.0 list(285, POS_X) = -1.0 list(285, POS_Y) = -1.0 list(286, POS_X) = 353.0 list(286, POS_Y) = 78.0 list(287, POS_X) = 382.0 list(287, POS_Y) = 89.0 list(288, POS_X) = 401.0 list(288, POS_Y) = 104.0 list(289, POS_X) = 411.0 list(289, POS_Y) = 122.0 list(290, POS_X) = -1.0 list(290, POS_Y) = -1.0 list(291, POS_X) = 213.0 list(291, POS_Y) = 69.0 list(292, POS_X) = 204.0 list(292, POS_Y) = 80.0 list(293, POS_X) = -1.0 list(293, POS_Y) = -1.0 list(294, POS_X) = 207.0 list(294, POS_Y) = 63.0 list(295, POS_X) = 196.0 list(295, POS_Y) = 70.0 list(296, POS_X) = -1.0 list(296, POS_Y) = -1.0 list(297, POS_X) = 202.0 list(297, POS_Y) = 94.0 list(298, POS_X) = 189.0 list(298, POS_Y) = 106.0 list(299, POS_X) = -1.0 list(299, POS_Y) = -1.0 list(300, POS_X) = 182.0 list(300, POS_Y) = 129.0 list(301, POS_X) = 178.0 list(301, POS_Y) = 142.0 list(302, POS_X) = -1.0 list(302, POS_Y) = -1.0 list(303, POS_X) = 316.0 list(303, POS_Y) = 27.0 list(304, POS_X) = 327.0 list(304, POS_Y) = 18.0 list(305, POS_X) = 338.0 list(305, POS_Y) = 16.0 list(306, POS_X) = 360.0 list(306, POS_Y) = 17.0 list(307, POS_X) = 372.0 list(307, POS_Y) = 26.0 list(308, POS_X) = -1.0 list(308, POS_Y) = -1.0 list(309, POS_X) = 328.0 list(309, POS_Y) = 26.0 list(310, POS_X) = 342.0 list(310, POS_Y) = 23.0 list(311, POS_X) = 365.0 list(311, POS_Y) = 28.0 list(312, POS_X) = 375.0 list(312, POS_Y) = 35.0 list(313, POS_X) = -1.0 list(313, POS_Y) = -1.0 list(314, POS_X) = 386.0 list(314, POS_Y) = 115.0 list(315, POS_X) = 405.0 list(315, POS_Y) = 143.0 list(316, POS_X) = -1.0 list(316, POS_Y) = -1.0 list(317, POS_X) = 386.0 list(317, POS_Y) = 142.0 list(318, POS_X) = 391.0 list(318, POS_Y) = 153.0 list(319, POS_X) = 384.0 list(319, POS_Y) = 154.0 list(320, POS_X) = 386.0 list(320, POS_Y) = 144.0 list(321, POS_X) = -1.0 list(321, POS_Y) = -1.0 list(322, POS_X) = 415.0 list(322, POS_Y) = 162.0 list(323, POS_X) = -1.0 list(323, POS_Y) = -1.0 list(324, POS_X) = 428.0 list(324, POS_Y) = 185.0 list(325, POS_X) = 426.0 list(325, POS_Y) = 202.0 list(326, POS_X) = -1.0 list(326, POS_Y) = -1.0 list(327, POS_X) = 347.0 list(327, POS_Y) = 62.0 list(328, POS_X) = 357.0 list(328, POS_Y) = 67.0 list(329, POS_X) = -1.0 list(329, POS_Y) = -1.0 list(330, POS_X) = 245.0 list(330, POS_Y) = 32.0 list(331, POS_X) = 230.0 list(331, POS_Y) = 45.0 list(332, POS_X) = -1.0 list(332, POS_Y) = -1.0 list(333, POS_X) = 232.0 list(333, POS_Y) = 55.0 list(334, POS_X) = 225.0 list(334, POS_Y) = 63.0 list(335, POS_X) = -1.0 list(335, POS_Y) = -1.0 list(336, POS_X) = 225.0 list(336, POS_Y) = 58.0 list(337, POS_X) = 204.0 list(337, POS_Y) = 82.0 list(338, POS_X) = -1.0 list(338, POS_Y) = -1.0 list(339, POS_X) = 225.0 list(339, POS_Y) = 29.0 list(340, POS_X) = 211.0 list(340, POS_Y) = 46.0 list(341, POS_X) = -1.0 list(341, POS_Y) = -1.0 list(342, POS_X) = 197.0 list(342, POS_Y) = 156.0 list(343, POS_X) = 192.0 list(343, POS_Y) = 170.0 list(344, POS_X) = -1.0 list(344, POS_Y) = -1.0 list(345, POS_X) = 400.0 list(345, POS_Y) = 73.0 list(346, POS_X) = 414.0 list(346, POS_Y) = 93.0 list(347, POS_X) = -1.0 list(347, POS_Y) = -1.0 list(348, POS_X) = 318.0 list(348, POS_Y) = 199.0 list(349, POS_X) = 312.0 list(349, POS_Y) = 201.0 list(350, POS_X) = 316.0 list(350, POS_Y) = 203.0 list(351, POS_X) = -1.0 list(351, POS_Y) = -1.0 list(352, POS_X) = 264.0 list(352, POS_Y) = 199.0 list(353, POS_X) = 259.0 list(353, POS_Y) = 203.0 list(354, POS_X) = -1.0 list(354, POS_Y) = -1.0 'img = loadImage("hansolo.jpg") 'f = openToEdit("fug.txt") 'seekFile f, fileSize("fug.txt") speed = 15 // fps = 15 frames = speed * 10 // 10 seconds frameLimit speed global f_ofs_x as float global f_ofs_y as float f_ofs_x = -248.0 f_ofs_y = -198.0 dim eyes(1, 1) as float eyes(0, 0) = 248' + f_ofs_x eyes(0, 1) = 198' + f_ofs_y eyes(1, 0) = 335' + f_ofs_x eyes(1, 1) = 198' + f_ofs_y start = timer() frame = 0 ind = 0 img_y = 15 function draw(xx#, yy#, s#, iter) if iter <= 0 then return 0 for i = 0 to LINE_COUNT r = 1 x1# = list(i, POS_X) y1# = list(i, POS_Y) list2(i, POS_X) = x1'+ rand(-r, r) list2(i, POS_Y) = y1 '+ rand(-r, r) if x1 <> -1 and y1 <> -1 then list2(i, POS_X) = (x1+ rand(-r, r) + f_ofs_x)*s + xx list2(i, POS_Y) = (y1+ rand(-r, r) +f_ofs_y)*s + yy endif next i if iter mod 2 = 0 then color 255,0,0 else color 255,255,255 endif for i = 1 to LINE_COUNT x1# = list2(i, POS_X) y1# = list2(i, POS_Y) x2# = list2(i+1, POS_X) y2# = list2(i+1, POS_Y) if (x2 <> -1 and y2 <> -1) and (x1 <> -1 and y2 <> -1) then line x1, y1, x2, y2 endif next i for i = 0 to 1 ex# = (eyes(i, 0) + f_ofs_x)*s + xx ey# = (eyes(i, 1) + f_ofs_y)*s + yy draw(ex, ey, 0.03*s, iter-1) 'box ex,ey , 8,8,1 next i endFunction frames = 63 scale# = 1.0 temp = makeImage(screenWidth(), screenHeight()) repeat //drawImage img, 0, img_y '453 167 mx# = mouseX() my# = mouseY() 'scale = scale + mouseMoveZ()*scale*0.1 scale = 2.0^(frame*0.16) f_ofs_x = f_ofs_x + (-leftKey() + rightKey())*0.1 f_ofs_y = f_ofs_y + (-upKey() + downKey())*0.1 'drawToImage temp 'color 0,0,0 'box 0,0,imageWidth(temp), imageHeight(temp), 1 draw(453, 167, scale, 4) 'drawToScreen 'text 0,0,frame 'text 0,12,(timer()-start) / 1000.0 'text 0,24, ind + ": " + mx + ", "+ my 'text 0,36, f_ofs_x + ", " + f_ofs_y drawScreen 'setWindow "FPS " + FPS() 'wait roundDown((1.0 / speed) * 1000) 'saveImage temp, "frames/kuva" + frame + ".bmp" 'if frame=frames-1 then end frame = (frame + 1) mod frames /* drawToImage img if mouseHit(1) or mouseHit(2) then if mouseHit(2) then mx = -1 my = -1 endif writeLine f, "("+ind+", POS_X) = " + mx writeLine f, "("+ind+", POS_Y) = " + my ind = ind + 1 if mx <> -1 and my <> -1 and ind > 0 then line old_x#, old_y# - img_y, mx, my - img_y endif old_x# = mx old_y# = my endif drawToScreen if keyHit(cbKeySpace) then closeFile(f) endif */ forever
Arvostan työtä jokatapauksessa *Applauds*
Re: Efektit
En suinkaan, vaan käytin hiiripohjaista editoria, jonka kommentoitu lähdekoodi on mukana viestissäni.Jopas jotakin wrote:Sijoititko kyseiset kordinaattilukuarvot ihan puhtaasti päästäsi?
-
- Devoted Member
- Posts: 594
- Joined: Tue Sep 30, 2008 4:30 pm
- Location: Ruudun toisella puolella
Re: Efektit
Huhhuh, pitkästä aikaa koneella jolla CB toimii, joten pitäähän sitä jotain heti koodata!
Tämmöi plasma tästä tuli, en ees tiiä mikä piti alunperin olla, mutta eipä sen väliä
Tämmöi plasma tästä tuli, en ees tiiä mikä piti alunperin olla, mutta eipä sen väliä
Code: Select all
SCREEN 400,300,0,1
Const BLOK=8
Function RGB(r,g,b)
r=Min(255,Max(0,r))
g=Min(255,Max(0,g))
b=Min(255,Max(0,b))
Return r Shl 16 + g Shl 8 + b
End Function
Dim plasma(400,300) As Float
'ClsColor 64,64,64
Cls
mode=0
z#=10
Repeat
t#=t+0.1
If z>1.1 Then
z=z-0.1
Else
z=1.1
End If
mode=mode+(KeyHit(200)-KeyHit(208))
Lock
a#=a+10
sina#=Sin(a)
cosa#=Cos(a)
For x = 0 To 400 Step BLOK
For y = 0 To 300 Step BLOK
Select mode
Case 0
plasma(x,y)=CurveValue((Sin(x*1.1+t*17)*Cos(y*Sin(x+t*17)+t*11)*2),plasma(x,y),20)
Case 1
plasma(x,y)=CurveValue((Sin(x*1.1+t*17)*Cos(y*0.7+t*11)),plasma(x,y),20)
Case 2
plasma(x,y)=CurveValue((Sin(x*1.1+t*17)*Cos(y*x+t*11)),plasma(x,y),20)
Default
plasma(x,y)=CurveValue(0,plasma(x,y),20)
End Select
r=255*(-plasma(x,y))
g=255*(-plasma(x,y))
b=255*(plasma(x,y))
If 1=1 Then
xx=(x-200)+plasma(x,y)*BLOK+Rnd(-1,1)
yy=(y-150)+plasma(x,y)*BLOK+Rnd(-1,1)
xx=xx*(1/z)
yy=yy*(1/z)
'xx=xx*cosa+yy*-sina
'yy=xx*-sina+yy*cosa
xx=xx+200+plasma(x,y)*BLOK
yy=yy+150-plasma(x,y)*BLOK
rg=RGB(r/2,g/2,b/2)
PutPixel2 xx,yy,RGB(r*4,g*4,b*4)
PutPixel2 xx+1,yy,rg
PutPixel2 xx,yy+1,rg
PutPixel2 xx-1,yy,rg
PutPixel2 xx,yy-1,rg
PutPixel2 xx+1,yy+1,rg
PutPixel2 xx-1,yy+1,rg
PutPixel2 xx-1,yy-1,rg
PutPixel2 xx+1,yy-1,rg
End If
Next y
Next x
Unlock
DrawScreen
Forever
-
- Moderator
- Posts: 227
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Efektit
Hurjan paljon hienoja efektejä tullut tänne
Wingman:
Tykkään varsinkin alusta. Tulee mieleen jotkut nykypartikkelidemot
Joitain vuosia sitten alotin tekemään(ei eka yritys) nopeaa pyöritystä cb:llä. Kaivoin sen nyt taas backupista ja tein suht nopean rotozoomin. Siihen voi myös piirtää ja siinä on esilasketut mipmapit kartalle, jotta se näyttäisi hiukan nätimmältä.
Taustatarinaa: Huomasin ala-asteella paintilla, että pyörityksen voi tehdä useammalla viistoamisoperaatiolla. Myöhemmin luin, että tästä hajotelmasta on hyötyä pyörityksen optimoinnissa. Silloin säästää laskutoimituksia. Coolbasicilla tämä menee hiukan erilailla, mutta on kuitenkin sovellettavissa, sillä copyboxilla voi toteuttaa viistoamisoperaation suht helposti ja nopeasti. Ongelmaksi jäi, etten tiennyt että paljonko pitää viistota mihinkin suuntaan. Yliopistossa sitten matematiikan(lineaarialgebra ja matriisilaskenta 1) tehtäviä tehdessä keksin, miten se ratkaistaan ja koodasinkin ensimmäisen version: http://atomim.kapsi.fi/r/pyor.cb
Tässä on taas uusin, hiukan rönsyillyt versio:
Ensimmäinen versio on varmaan esimerkillisempi. Uudemmassa on paljon toistoa kun vasta testasin mipmappeja
Saa käyttää peleissä ja demoissa. Siinä kuitenkin tulee ongelmaksi se, että drawgame ei piirrä ruutua isompaa aluetta ja silloin pyörittäessä jää mustaa reunoille. Mustan voi piilottaa suurentamalla kuvaa samalla kun pyörittää. Myöhemmässä versiossa on mukana suurennus. Mipmapit(muut kuin img) ja toisto(for x ja y-loopit) kannattaa ottaa ensimmäisenä pois käytöstä.
buf1, buf2, buf3 ja buf4 ovat väliaikaisia kuvia, joita pyöritys käyttää. Ensimmäiseen niistä piirretään pyöritettävä kuva ja viimeisestä sen saa pyöritettynä.
Pyöritys tehdään hiukan erilailla toiselle puoliskolle, sillä koko ympyrän kattaminen samanlailla vaatisi äärettömän viiston. Voit koittaa kommentoida toisen pois. Siellä on valmiiksi remstartit. Iffi pitää poistaa myös. Debugginäkymän saa kun ottaa screenin pois kommenteista ja vaihtaa pitkän drawimagerivin tuon for x=10-jutun sijaan.
Ainiin. Optimointivaraa jäi nyt kun en jaksanut hinkata niin paljoa kun tuota tarvi muuttaa. Noin kolme kertaa hitaammaksi tuli tätä tehdessä, mistä ehkä puolet on turhaa, mutta noista copyboxien kaavoista ottaa vähän huonosti selvää. Kunhan vaan laskisi, voisi jättää ne copyboxit pois, jotka eivät siirtäisi muutenkaan mitään. Tyhjän siirtäminen näyttää olevan kuitenkin nopeampaa kuin normaali siirto, joten vaikea sanoa varmasti, paljonko on varaa.
Hmm... Toisto taitaa viedä sen edun ja optimoitivaran kun tyhjää ei enää pitäisi olla :S
Wingman:
Tykkään varsinkin alusta. Tulee mieleen jotkut nykypartikkelidemot
Joitain vuosia sitten alotin tekemään(ei eka yritys) nopeaa pyöritystä cb:llä. Kaivoin sen nyt taas backupista ja tein suht nopean rotozoomin. Siihen voi myös piirtää ja siinä on esilasketut mipmapit kartalle, jotta se näyttäisi hiukan nätimmältä.
Taustatarinaa: Huomasin ala-asteella paintilla, että pyörityksen voi tehdä useammalla viistoamisoperaatiolla. Myöhemmin luin, että tästä hajotelmasta on hyötyä pyörityksen optimoinnissa. Silloin säästää laskutoimituksia. Coolbasicilla tämä menee hiukan erilailla, mutta on kuitenkin sovellettavissa, sillä copyboxilla voi toteuttaa viistoamisoperaation suht helposti ja nopeasti. Ongelmaksi jäi, etten tiennyt että paljonko pitää viistota mihinkin suuntaan. Yliopistossa sitten matematiikan(lineaarialgebra ja matriisilaskenta 1) tehtäviä tehdessä keksin, miten se ratkaistaan ja koodasinkin ensimmäisen version: http://atomim.kapsi.fi/r/pyor.cb
Tässä on taas uusin, hiukan rönsyillyt versio:
Code: Select all
'This is your first CoolBasic intro!
'katso alkuperäinen selitys: http://atomim.kapsi.fi/r/pyor.cb
'lisätty zoomaus
SetWindow "ladataan mipmappeja"
SCREEN 400,300,0,2
'SCREEN 800,600
img= LoadImage("media/map.bmp")
Smooth2D ON
'remstart
img2=CloneImage(img)
ResizeImage img2,ImageWidth(img)*1.5,ImageHeight(img)*1.5
fiximg(img2)
ResizeImage img2,ImageWidth(img),ImageHeight(img)
fiximg(img2)
img3=CloneImage(img2)
ResizeImage img3,ImageWidth(img)*1.5,ImageHeight(img)*1.5
fiximg(img3)
ResizeImage img3,ImageWidth(img),ImageHeight(img)
fiximg(img3)
img4=CloneImage(img3)
ResizeImage img4,ImageWidth(img)*1.5,ImageHeight(img)*1.5
fiximg(img4)
ResizeImage img4,ImageWidth(img),ImageHeight(img)
fiximg(img4)
ResizeImage img4,ImageWidth(img)*0.5,ImageHeight(img)*0.5
fiximg(img4)
img5=CloneImage(img4)
ResizeImage img5,ImageWidth(img)*1.5,ImageHeight(img)*1.5
fiximg(img5)
ResizeImage img5,ImageWidth(img),ImageHeight(img)
fiximg(img5)
ResizeImage img5,ImageWidth(img)*0.5,ImageHeight(img)*0.5
fiximg(img5)
imgb=CloneImage(img)
ResizeImage imgb,ImageWidth(img)*2,ImageHeight(img)*2
fiximg(imgb)
'remend
Global extraspace#
extraspace=3.7//1.75
bw=ImageWidth(img)*extraspace
bh=imageHeight(img)
ix=(bw-ImageWidth(img))/2
iy=(bh*extraspace-bh)/2
buf = MakeImage(bw,Int(bh*extraspace))
buf2 = makeImage(bw,Int(bh*extraspace))
buf3 = makeImage(bw,bh)
buf4 = makeImage(bw,bh)
t=timer()
kulma#=0
Repeat
'ajanotto alku
t=Timer()
tt=t*0.3
zoom#=1+Sin(tt*0.2)*0.4*2.0
kulma#=tt*0.13
cposx#=Sin(tt*0.03)*2000
cposy#=Sin(tt*0.017)*2000
clear(buf):clear(buf2):clear(buf3):clear(buf4)
DrawToImage buf
'DrawImage img,ix,iy
cx#=(cposx+400*10) Mod 400
cy#=(cposy+300*10) Mod 300
For x=-1 To 1 Step 1
For y=-1 To 1 Step 1
If zoom<1.0 And zoom>0.7 Then
DrawImage imgb*(zoom>=1.0)+img2*(zoom>0.85 And zoom<1.0)+img3*(zoom<=0.85 And zoom>=0.7),ix+x*400+cx,iy+y*300+cy
ElseIf zoom<0.7 Then
DrawImage img5*(zoom<=0.6)+img4*(zoom<0.7 And zoom >0.6),ix+ImageWidth(img)*0.5*0.5+x*400*0.5+cx*0.5,iy+bh*0.5*0.5+y*300*0.5+cy*0.5
Else
DrawImage imgb,ix-ImageWidth(img)*0.5+x*400*2+cx*2,iy-bh*0.5+y*300*2+cy*2
EndIf
Next y
Next x
DrawToScreen
pyör(buf,buf2,buf3,buf4,kulma,zoom*((1.0/2)^(0+(zoom>=1.0)-(zoom<=0.7))) )
DrawImage buf4,-ix,0
For x=10 To -10 Step -1
For y=10 To- 10 Step -1
xo=Cos(kulma)*zoom*(400)*y-Sin(kulma)*zoom*(300)*x
yo=-Cos(kulma)*zoom*(300)*x-Sin(kulma)*zoom*(400)*y
DrawImage buf4,-ix+xo,yo
Next y
Next x
If MouseDown(1)
Color Sin(kulma)*127+128,Cos(MouseX())*127+128,Sin(MouseY()+tt*0.01)*127+128
a2=GetAngle(200,150,MouseX(),MouseY())
a3=kulma-a2
d=Distance(MouseX(),MouseY(),200,150)/zoom
xx#=(200+Cos(a3)*d-cposx+400*100) Mod 400
yy#=(150+Sin(a3)*d-cposy+300*100) Mod 300
DrawToImage img2
Circle xx,yy,10
DrawToScreen
DrawToImage img3
Circle xx,yy,10
DrawToScreen
DrawToImage img4
Circle xx*0.5,yy*0.5,5
DrawToScreen
DrawToImage img5
Circle xx*0.5,yy*0.5,5
DrawToScreen
DrawToImage imgb
Circle xx*2,yy*2,20
DrawToScreen
EndIf
'DrawImage buf,-ix,-iy:DrawImage buf2,400-ix,-iy:DrawImage buf3,-ix,300:DrawImage buf4,400-ix+(kulma Mod 2)*0,300
//ajanotto loppu
t2=Timer()-t
setWindow "kulma: "+a+" pyöritysaika: "+t2
DrawScreen
Forever
Function pyör(buf,buf2,buf3,buf4, a#, zoom#)
w=ImageWidth(buf4)
w2#=w/2
h=ImageHeight(buf4)
h2#=h/2
he=h*extraspace
he2#=h2*extraspace
izoom#=1.0/zoom
If (a+270) mod 360 > 180 Then
a#= (a+90) mod 360 - 90
y#=sin(a)
x#=- tan(a/2.0)
For i=0 To he
CopyBox 0,Int((i-he2)*izoom+he2+1000)-1000,w,1,Int((he2-i)*x*izoom),i,Image(buf),Image(buf2)
Next i
For i=0 To w
CopyBox Int((i-w2)*izoom+w2+1000)-1000,0,1,he,i,Int((w2-i)*y)+Int(h2-he2),Image(buf2),Image(buf3)
Next i
For i=0 to h
CopyBox 0,i,w,1,Int((h2-i)*x),i,image(buf3),image(buf4)
next i
//lasketaan toiset 180 astetta suunnilleen samanlailla
'remstart
Else
a#=((a+90) mod 360 + 90)
y#=sin(a)
x#=-tan(a/2.0)
For i=0 to he
CopyBox 0,Int((i-he2)*izoom+he2+1000)-1000,w,1,Int((he2-i)*x*izoom),i,Image(buf),image(buf2)
Next i
For i=0 To w
CopyBox Int(w-((i-w2)*izoom+w2)+1000)-1000,0,1,he,i,-Int((w2-i)*y)+Int(h2-he2),Image(buf2),Image(buf3)
Next i
For i=0 to h
CopyBox 0,h-i,w,1,Int((h2-i)*x),i,image(buf3),image(buf4)
Next i
EndIf
'remend
EndFunction
function clear(buf)
drawToImage buf
cls
DrawToScreen
EndFunction
'tällä korjataan resizeimagen tummentamat reunat
Function Fiximg(buf)
DrawToImage(buf)
For i=1 To 2
CopyBox 0,i,ImageWidth(buf),1,0,0,Image(buf)
CopyBox i,0,1,ImageHeight(buf),0,0,Image(buf)
CopyBox 0,ImageHeight(buf)-1-i,ImageWidth(buf),1,0,ImageHeight(buf)-i,Image(buf)
CopyBox ImageWidth(buf)-1-i,0,1,ImageHeight(buf),ImageWidth(buf)-i,0,Image(buf)
Next i
DrawToScreen
EndFunction
Saa käyttää peleissä ja demoissa. Siinä kuitenkin tulee ongelmaksi se, että drawgame ei piirrä ruutua isompaa aluetta ja silloin pyörittäessä jää mustaa reunoille. Mustan voi piilottaa suurentamalla kuvaa samalla kun pyörittää. Myöhemmässä versiossa on mukana suurennus. Mipmapit(muut kuin img) ja toisto(for x ja y-loopit) kannattaa ottaa ensimmäisenä pois käytöstä.
buf1, buf2, buf3 ja buf4 ovat väliaikaisia kuvia, joita pyöritys käyttää. Ensimmäiseen niistä piirretään pyöritettävä kuva ja viimeisestä sen saa pyöritettynä.
Pyöritys tehdään hiukan erilailla toiselle puoliskolle, sillä koko ympyrän kattaminen samanlailla vaatisi äärettömän viiston. Voit koittaa kommentoida toisen pois. Siellä on valmiiksi remstartit. Iffi pitää poistaa myös. Debugginäkymän saa kun ottaa screenin pois kommenteista ja vaihtaa pitkän drawimagerivin tuon for x=10-jutun sijaan.
Ainiin. Optimointivaraa jäi nyt kun en jaksanut hinkata niin paljoa kun tuota tarvi muuttaa. Noin kolme kertaa hitaammaksi tuli tätä tehdessä, mistä ehkä puolet on turhaa, mutta noista copyboxien kaavoista ottaa vähän huonosti selvää. Kunhan vaan laskisi, voisi jättää ne copyboxit pois, jotka eivät siirtäisi muutenkaan mitään. Tyhjän siirtäminen näyttää olevan kuitenkin nopeampaa kuin normaali siirto, joten vaikea sanoa varmasti, paljonko on varaa.
Hmm... Toisto taitaa viedä sen edun ja optimoitivaran kun tyhjää ei enää pitäisi olla :S
-
- Newcomer
- Posts: 1
- Joined: Tue Nov 13, 2007 11:54 am
Re: Efektit
Annoin sen pyöriä jonkun aikaa mutta 10.000 "bobs" eikä FPS tipu.koodaaja wrote:Isketääs tämä tännekin. Shadebobeja yhden ZX -demon innoittamana, renderöintinopeuksia eri pallomäärille saa ilmoitella.
Code: Select all
SCREEN 640, 480 Dim imgs(9) Repeat If im = 0 And ang = 0 Then ball = MakeImage(50, 50) DrawToImage ball For i = 0 To 49 If i<10 then imgs(i) = MakeImage(640, 480) For j = 0 To 49 If Distance(i,j,25,25)<23 Then c# = Max(.0, .1+.45*((i-25)/24.0-(j-25)/24.0+Sqrt(1-(i-25)*(i-25)/576.0-(j-25)*(j-25)/756.0))) Color 20+c*80, 40+c*80, 100+c*100 Else Color 255, 0, 255 EndIf Dot i, j Next j Next i DrawToScreen MaskImage ball, 255, 0, 255 Color 255, 255, 255 im = 0 EndIf im = (im + 1) Mod 10 DrawToImage imgs(im) For i = 0 To balls + 1 DrawImage ball, 320+120.0*Cos(.20*(ang+im))-80*Sin(.60*(ang+im))-25, 240+120*Sin(.17*(ang+im))+80*Cos(.57*(ang+im))-25 Next i If im = 9 Then ang = ang + 9 count + 1 EndIf DrawToScreen DrawImage imgs(im), 0, 0 Text 5,5, "CB knows no boundaries (FPS():"+Str(FPS())+")" Text 400, 460, Str(count)+" bobs by msqrt/Peisik" DrawScreen Forever