Efektit

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Character
Active Member
Posts: 113
Joined: Thu Nov 27, 2008 2:16 pm

Re: Efektit

Post by Character »

Hienohan tuo on :) Hyvää työtä
EDIT:

Pitää yrittää vielä vähän kehitellä.. On niin karkea tuo minun tekele :D

Kumiankka
Member
Posts: 65
Joined: Wed May 18, 2011 5:17 pm
Location: Artjärvi

Re: Efektit

Post by Kumiankka »

Teimpä tällaisen simppelihkön räjähdys/paineaaltoefektin.

Code: Select all

FrameLimit 40
SCREEN 800, 600

Const R_VÄLI = 5
Const R_NUM = 10

rstart = 10
rmax = 255

kasvu = 4

r = 0

Repeat
	
	r = Explosion(r, rstart, rmax, kasvu, 0, R_VÄLI, R_NUM)
	
	DrawScreen
Forever

Function Explosion(curR, rStart, rMax, rKasvu, tyyppi = 0, _kerrosväli = 5, _kerrosmäärä = 10)

	If curR < rStart Then curR = rStart

	curR = curR + rKasvu
	If curR > rMax + _kerrosmäärä * _kerrosväli Then
		If tyyppi = 0 Then // Looppi
			curR = rStart
		Else // Pysäytys
			curR = -1 // Ilmoittaa siitä että efekti lopussa.
		EndIf
	EndIf
	
	For i = 0 To _kerrosmäärä
	
		col# = Max(Min(255 - ((curR - i * _kerrosväli * 1.0) / (rMax - rStart)) * 255.0, 255), 0)
	
		Color col, col, col
	
		Circle 400 - (curR/2 - i * _kerrosväli), 300 - (curR/2 - i * _kerrosväli), curR - (i * _kerrosväli) * 2, True
	Next i
	
	Return curR
EndFunction 
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Efektit

Post by Wingman »

Löysin jonkin vanhan tuliefektin raakileen jonka olin tehnyt, mutta se ei jotenkin toiminut. Korjailin hetken ja sain tällaista aikaan;

Code: Select all

Const SW=80
Const SH=60
SCREEN SW*2,SH*2,0,1
SCREEN SW*2,SH*2,0,2
zoomed_screen_a = MakeImage(ScreenWidth(), ScreenHeight())
zoomed_screen 	= MakeImage(ScreenWidth(), ScreenHeight())
MaskImage zoomed_screen_a, 255, 0, 254
MaskImage zoomed_screen, 255, 0, 254
Dim buf1(SW,SH) As Float 
Dim buf2(SW,SH) As Float 
c=0
pot#=1.2
Global t
blockynes=1
disrupt#=0
bx#=0
bxv#=0
r#=0.5
g#=2
b#=5
Repeat	
	t=Timer()
	bxv=bxv+(KeyDown(32)-KeyDown(30))*0.1
	bx=bx+bxv
	bxv=CurveValue(0,bxv,20)
	If bx>SW+4 Then bx=-5
	If bx<-5 Then bx=SW+4
	Lock 
	For i=0 To ScreenWidth()-1
		'If i<bx+5 And i>bx-5 Then 
		buf1(i,ScreenHeight()-1) = 255
		buf1(i,ScreenHeight()-2) = 255
		'EndIf 
	Next i
	xx=CurveValue(Rand(-80,160),xx,6)
	xx2=CurveValue((xx+xx3)/2,xx2,10)
	xx3=CurveValue(Rand(-80,160),xx3,10)
	For x=1 To SW-1
		For y=1 To SH-1
			c1=buf1(x+1,y+1)
			c2=buf1(x-1,y-1)
			c3=buf1(x-1,y+1)
			c4=buf1(x+1,y-1)
			
			newc=(c1+c2+c3+c4)/Rnd(3,5)
            newc=newc-Rnd(0.1,15)
            If newc<0 Then newc=0

            buf2(x,y-1)=newc
		Next y
	Next x
	For x=1 To SW-1
		For y=1 To SH-1
			Color Min(255,Max(0,buf2(x,y)^pot/r)),Min(255,Max(0,buf2(x,y)^pot/g)),Min(255,Max(0,buf2(x,y)^pot/b))
			Line x,y,x+1,y
			buf1(x,y)=buf2(x,y)
		Next y
	Next x    
	Unlock 
	Gosub doublePixel
	DrawScreen
Forever 
doublePixel:
	For y=0 To ScreenHeight() / 2
		CopyBox 0, y/blockynes*blockynes, 640, 1, 0, y*2, SCREEN(), Image(zoomed_screen_a)
		CopyBox 0, (y+1)/blockynes*blockynes, 640, 1, 0, y*2+1, SCREEN(), Image(zoomed_screen_a)
	Next y
	For x=0 To ScreenWidth() / 2
		CopyBox x/blockynes*blockynes,  Int( (Sin(x + t*0.01)*disrupt#) ), 1, 480, x*2, 0, Image(zoomed_screen_a), Image(zoomed_screen)
		CopyBox x/blockynes*blockynes, -Int( (Sin(x + t*0.01)*disrupt#) ), 1, 480, x*2+1, 0, Image(zoomed_screen_a), Image(zoomed_screen)
	Next x
	DrawImage zoomed_screen, 0, 0
Return 
skaalasin ruudun vielä Peisikin doublePixel -aliohjelmalla, kiitokset sinne
- - - -
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Efektit

Post by valscion »

Wingman wrote:Löysin jonkin vanhan tuliefektin raakileen jonka olin tehnyt, mutta se ei jotenkin toiminut. Korjailin hetken ja sain tällaista aikaan;
Oho, on kyllä hienoin tuliefekti minkä olen täällä nähnyt. Ei edes pätkinyt yhtään :) tuon kun vois pistää johonkin peliin niin voisi tulla nättiä jälkeä. Harmi vaan kun ei ole mitään projua, johon tuota voisi ympätä.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Efektit

Post by Wingman »

Tuli taas tehtyä metapallot, joita en taida olla tähän topiikkiin vielä lähettänyt.. Space asettaa palloille randomin kohdesijainnin, ja hiiren 1. nappi asettaa kohdesijainnin hiiren kohdalle. Koodissa BLOCK -vakio vaikuttaa pikselöityneisyyteen, nopeammilla koneilla pienempi arvo voi jopa pyöriä :)

käytin taas Peisikin DoublePixel -aliohjelmaa, se on vain niin kovin hyvä. kiitokset peisikin sedille.

Code: Select all

Const SW=100
Const SH=100
SCREEN SW*2,SH*2,0,1
SCREEN SW*2,SH*2,0,2
zoomed_screen_a = MakeImage(ScreenWidth(), ScreenHeight())
zoomed_screen 	= MakeImage(ScreenWidth(), ScreenHeight())
MaskImage zoomed_screen_a, 255, 0, 254
MaskImage zoomed_screen, 255, 0, 254
Type META
	Field x As Float 
	Field y As Float  
	Field s As Float 
	Field r As Float 
	Field g As Float 
	Field b As Float 
	Field kx As Float 
	Field ky As Float 
EndType 
For i=0 To 8
	ba.META=New(META)
	ba\x=Rand(SW)
	ba\y=Rand(SW)
	ba\s=8
	ba\r=Rnd(1)
	ba\g=Rnd(1)
	ba\b=Rnd(1)
	ba\kx=Rand(SW)
	ba\ky=Rand(SH)
Next i
Global t
Const BLOCK=3
blockynes=BLOCK
disrupt#=0
r#=0
g#=0
b#=0
Repeat 	
	t=Timer()
	For ba.META=Each META
		ba\x=CurveValue(ba\kx,ba\x,20)
		ba\y=CurveValue(ba\ky,ba\y,20)
		If KeyHit(57) Then 
			ba\kx=Rand(SW)
			ba\ky=Rand(SH)
		EndIf
		If MouseHit(1) Then 
			ba\kx=MouseX()/2
			ba\ky=MouseY()/2
		EndIf 
			
	Next ba.META
	Lock 
	For x=0 To SW Step BLOCK
		For y=0 To SH Step BLOCK
			r=0
			g=0
			b=0
			For ba.META=Each META
				r=r+(512*ba\s/(Distance(ba\x,ba\y,x,y)^2))*ba\r
				g=g+(512*ba\s/(Distance(ba\x,ba\y,x,y)^2))*ba\g
				b=b+(512*ba\s/(Distance(ba\x,ba\y,x,y)^2))*ba\b
			Next ba
			r=Min(255,Max(0,r))
			g=Min(255,Max(0,g))
			b=Min(255,Max(0,b))
			If MouseX()/2>x-1 And MouseX()/2<x+BLOCK And MouseY()/2>y-1 And MouseY()/2<y+BLOCK Then 
				txt$=Int(r)+" "+Int(g)+" "+Int(b)+" "
			EndIf 
			Color r,g,b
			For yy=y To y+BLOCK
				Line x,yy,x+BLOCK,yy
			Next yy
		Next y
	Next x
	Unlock 
	Gosub doublePixel
	Color 255,255,255
	Text 0,0,txt
	DrawScreen 
Forever 
doublePixel:
	For y=0 To ScreenHeight() / 2
		CopyBox 0, y/blockynes*blockynes, 640, 1, 0, y*2, SCREEN(), Image(zoomed_screen_a)
		CopyBox 0, (y+1)/blockynes*blockynes, 640, 1, 0, y*2+1, SCREEN(), Image(zoomed_screen_a)
	Next y
	For x=0 To ScreenWidth() / 2
		CopyBox x/blockynes*blockynes,  Int( (Sin(x + t*0.01)*disrupt#) ), 1, 480, x*2, 0, Image(zoomed_screen_a), Image(zoomed_screen)
		CopyBox x/blockynes*blockynes, -Int( (Sin(x + t*0.01)*disrupt#) ), 1, 480, x*2+1, 0, Image(zoomed_screen_a), Image(zoomed_screen)
	Next x
	DrawImage zoomed_screen, 0, 0
Return 
- - - -
Kumiankka
Member
Posts: 65
Joined: Wed May 18, 2011 5:17 pm
Location: Artjärvi

Re: Efektit

Post by Kumiankka »

Löytyipä kiintolevyä siivotessa tällainen jokin josta oli joskus aikanaan tarkoitus tulla jonkinlainen valaistusmoottori...

Code: Select all

FrameLimit 40

Const SW = 800
Const SH = 800

SCREEN SW,SH

Const LOOTA_W = 8
Const LOOTA_H = 8

Const VALOISUUS = 0
// RED = 1
// GREEN = 2
// BLUE = 3
Const LAMPPU = 4
Const PÄIVITETTY = 5
Const MAXVALO = 6

Const VALOISUUS_ALKU = 0
Const VALOISUUS_VÄLI = 20
Const VALOISUUS_MAX = 255

Const LAMPPU001_VALOISUUS = 150
Const LAMPPU001_R = 0
Const LAMPPU001_G = 0
Const LAMPPU001_B = 0

Dim ruudukko, _R, _G, _B, _valoisuus, _valo As Byte
Dim _x, _y, _xx, _yy, valo_range, ang As Short

Dim loota(SW/LOOTA_W, SH/LOOTA_H, 5) //loota(X, Y, VALOISUUS/RED/GREEN/BLUE/LAMPPU?/PÄIVITETTY?)
For xx = 0 To SW / LOOTA_W
	For yy = 0 To SH / LOOTA_H
		loota(xx, yy, VALOISUUS) = VALOISUUS_ALKU
		loota(xx, yy, RED) = 0
		loota(xx, yy, GREEN) = 0
		loota(xx, yy, BLUE) = 0
		loota(xx, yy, LAMPPU) = 0
		loota(xx, yy, PÄIVITETTY) = 0
	Next yy
Next xx

ruudukko = 0

Repeat
	
	Color cbWhite
	
	If KeyHit(cbKeySpace) Then
		For xx = 0 To SW / LOOTA_W
			For yy = 0 To SH / LOOTA_H
				loota(xx, yy, VALOISUUS) = VALOISUUS_ALKU
				loota(xx, yy, RED) = 0
				loota(xx, yy, GREEN) = 0
				loota(xx, yy, BLUE) = 0
				loota(xx, yy, LAMPPU) = 0
				loota(xx, yy, PÄIVITETTY) = 0
			Next yy
		Next xx
	EndIf
	
	If MouseHit(1) Then
		
		_x = ToGrid(MouseX(), LOOTA_W) / LOOTA_W
		_y = ToGrid(MouseY(), LOOTA_H) / LOOTA_H
		If loota(_x, _y, LAMPPU) = 0 Then
			_valoisuus = loota(_x, _y, VALOISUUS)
			loota(_x, _y, VALOISUUS) = (VALOISUUS_ALKU + LAMPPU001_VALOISUUS)
			loota(_x, _y, RED) = loota(_x, _y, RED) + LAMPPU001_R
			loota(_x, _y, GREEN) = loota(_x, _y, GREEN) + LAMPPU001_G
			loota(_x, _y, BLUE) = loota(_x, _y, BLUE) + LAMPPU001_B
			loota(_x, _y, LAMPPU) = 1
			loota(_x, _y, PÄIVITETTY) = 1
			
			valo_range = (LAMPPU001_VALOISUUS / VALOISUUS_VÄLI)
			For ang = 0 To 359 Step 4
				For radius = 0 To valo_range
					
					_xx =  ToGrid(MouseX() + Cos(ang) * (radius * LOOTA_W), LOOTA_W) / LOOTA_W
					_yy = ToGrid(MouseY() - Sin(ang) * (radius * LOOTA_H), LOOTA_H) / LOOTA_H
							
					If _xx >= 0 And _yy >= 0 And _xx < SW/LOOTA_W And _yy < SH/LOOTA_H Then
						If loota(_xx, _yy, PÄIVITETTY) = 0 Then //And loota(_xx, _yy, LAMPPU) = 0 Then
						
							_dist = Distance(_x + (LOOTA_W / 2), _y + (LOOTA_H / 2), _xx + (LOOTA_W / 2), _yy + (LOOTA_H / 2))
							
							If loota(_xx, _yy, RED) = 0 And loota(_xx, _yy, GREEN) = 0 And loota(_xx, _yy, BLUE) = 0 Then
								
								loota(_xx, _yy, RED) = loota(_x, _y, RED)
								loota(_xx, _yy, GREEN) = loota(_x, _y, GREEN)
								loota(_xx, _yy, BLUE) = loota(_x, _y, BLUE)
								
								If loota(_xx, _yy, VALOISUUS) = 0 Then
									_valo = Max(0, loota(_x, _y, VALOISUUS) - (_dist * VALOISUUS_VÄLI))
									loota(_xx, _yy, VALOISUUS) = _valo
								Else
									_valo = Max(0, loota(_x, _y, VALOISUUS) - (_dist * VALOISUUS_VÄLI))
									loota(_xx, _yy, VALOISUUS) = (_valo + loota(_xx, _yy, VALOISUUS))
								EndIf
								
							Else
								
								_R = (loota(_xx, _yy, RED) + loota(_x, _y, RED)) / 2
								_G = (loota(_xx, _yy, GREEN) + loota(_x, _y, GREEN)) / 2
								_B = (loota(_xx, _yy, BLUE) + loota(_x, _y, BLUE)) / 2
								
								loota(_xx, _yy, RED) = _R
								loota(_xx, _yy, GREEN) = _G
								loota(_xx, _yy, BLUE) = _B
								
								If loota(_xx, _yy, VALOISUUS) = 0 Then
									_valo = Max(0, loota(_x, _y, VALOISUUS) - (_dist * VALOISUUS_VÄLI))
									loota(_xx, _yy, VALOISUUS) = _valo
								Else
									_valo = Max(0, loota(_x, _y, VALOISUUS) - (_dist * VALOISUUS_VÄLI))
									loota(_xx, _yy, VALOISUUS) = (_valo + loota(_xx, _yy, VALOISUUS))
								EndIf
								
							EndIf
							loota(_xx, _yy, PÄIVITETTY) = 1
							
						EndIf
					EndIf
					
				Next radius
			Next ang
			
			
			loota(_x, _y, VALOISUUS) = loota(_x, _y, VALOISUUS) + _valoisuus
		EndIf
		
	EndIf
	
	For xx = 0 To SW / LOOTA_W
		For yy = 0 To SH / LOOTA_H
		
			loota(xx, yy, PÄIVITETTY) = 0
			
			_R = Min(loota(xx, yy, RED) + loota(xx, yy, VALOISUUS), VALOISUUS_MAX)
			_G = Min(loota(xx, yy, GREEN) + loota(xx, yy, VALOISUUS), VALOISUUS_MAX)
			_B = Min(loota(xx, yy, BLUE) + loota(xx, yy, VALOISUUS), VALOISUUS_MAX)
			Color _R, _G, _B
			Box xx * LOOTA_W, yy * LOOTA_H, LOOTA_W, LOOTA_H, 1
		Next yy
	Next xx
	
	If ruudukko = 1 Then
	
		Color cbBlack
		For xx = 0 To SW / LOOTA_W
			Line xx * LOOTA_W, 0, xx * LOOTA_W, SH
		Next xx
		
		For yy = 0 To SH / LOOTA_H
			Line 0, yy * LOOTA_H, SW, yy * LOOTA_H
		Next yy
		
	EndIf
	
	Color cbBlue
	Text 5, 5, "MX: "+ MouseX() + ", MY: " + MouseY()
	Text 5, 5 + 15, "SMX: "+ ToGrid(MouseX(), LOOTA_W) + ", SMY: " + ToGrid(MouseY(), LOOTA_H)
	Text 5, 5 + 30, "TileX: "+ (ToGrid(MouseX(), LOOTA_W)/LOOTA_W) + ", TileY: " + (ToGrid(MouseY(), LOOTA_H)/LOOTA_H)
	Text 5, 5 + 45, "_xx: " + _xx + ", _yy: " +_yy
	
	DrawScreen
Forever 
/////////////////////////////////////////////////////////////////////////////////////////
// ToGrid(X/Y, GRID_W/H)
//
// Kohdistaa X tai Y koordinaatin ruudukkoon.
Function ToGrid(_xy#, _gridwh#)
	Return Int(_xy  - (_xy Mod _gridwh))
EndFunction 
User avatar
Timblex
Advanced Member
Posts: 252
Joined: Sun Apr 11, 2010 10:37 am
Location: Kouvola

Re: Efektit

Post by Timblex »

Hienohan tuo on mutta vähän buginen, kun välillä tulee mustia laatikoita niitten valkoisten pallojen keskelle. :)
Entinen timpe99...
Demokisa 2013 demo valmis, Check it out!
Untitled.bmp
Member
Posts: 52
Joined: Sat May 12, 2012 7:11 pm
Location: C:/WINDOWS/system32

Re: Efektit

Post by Untitled.bmp »

Eli väsäsinpä tälläisen hienon efektin, joka piirtää ruuduntäyteen erilaisia dotteja. Saa käyttää, ei tarvitse mainita crediiteistä, koska tämä efe on todella helppo tehdä itsekin. Tämä saa kuitenkin hienon lopputuloksen. Koodia saa ja kannattaa optimoida.

Code: Select all

Repeat
Dot x,y
x=x+1
    If x=ScreenWidth() Then
    y=y+1
    x=0
    EndIf

    Color r,g,b
    r=Rand(255)
    g=Rand(255)
    b=Rand(255)

Drawscreen OFF 
Until x=ScreenWidth() And y=ScreenHeight()
Last edited by Untitled.bmp on Sun May 13, 2012 1:01 pm, edited 1 time in total.
Intel core i7 3960X 3,9ghz 15mb
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Efektit

Post by Latexi95 »

Untitled.bmp wrote:Eli väsäsinpä tälläisen hienon efektin, joka piirtää ruuduntäyteen erilaisia dotteja. Saa käyttää, ei tarvitse mainita crediiteistä, koska tämä efe on todella helppo tehdä itsekin. Tämä saa kuitenkin hienon lopputuloksen. Koodia saa ja kannattaa optimoida.

Code: Select all

Repeat
Dot x,y
x=x+1
    If x=ScreenWidth() Then
    y=y+1
    x=0
    EndIf

    Color r,g,b
    r=Rand(255)
    g=Rand(255)
    b=Rand(255)
Until x=ScreenWidth() And y=ScreenHeight()
Sinulta on kadonnut DrawScreen jonnekkin?
Untitled.bmp
Member
Posts: 52
Joined: Sat May 12, 2012 7:11 pm
Location: C:/WINDOWS/system32

Re: Efektit

Post by Untitled.bmp »

Latexi95 wrote:
Untitled.bmp wrote:Eli väsäsinpä tälläisen hienon efektin, joka piirtää ruuduntäyteen erilaisia dotteja. Saa käyttää, ei tarvitse mainita crediiteistä, koska tämä efe on todella helppo tehdä itsekin. Tämä saa kuitenkin hienon lopputuloksen. Koodia saa ja kannattaa optimoida.

Code: Select all

Repeat
Dot x,y
x=x+1
    If x=ScreenWidth() Then
    y=y+1
    x=0
    EndIf

    Color r,g,b
    r=Rand(255)
    g=Rand(255)
    b=Rand(255)
Until x=ScreenWidth() And y=ScreenHeight()
Sinulta on kadonnut DrawScreen jonnekkin?
Niin taisi käydä :D Taisi kadota, miettiessä, että tekiskö tosta funktion vai laittasko vain repeattiin noh, korjaan.
Intel core i7 3960X 3,9ghz 15mb
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Efektit

Post by Awaclus »

Pikseli kerrallaan piirtäminen on aika hidasta, paitsi jos tarkoituksena on nimenomaan ruudun pikku hiljaa täyttyminen pikseleillä (tai on se silloinkin hidasta, mutta silloin se ei haittaa). Tällä tavalla saa kerralla koko ruudun täytettyä, minun koneellani menee noin 250-300 ms:

Code: Select all

Repeat
Dot x,y
x=x+1
    If x=ScreenWidth() Then
    y=y+1
    x=0
    EndIf
    Color r,g,b
    r=Rand(255)
    g=Rand(255)
    b=Rand(255)
	If y >ScreenHeight() Then Exit
Forever
DrawScreen
WaitKey
Untitled.bmp
Member
Posts: 52
Joined: Sat May 12, 2012 7:11 pm
Location: C:/WINDOWS/system32

Re: Efektit

Post by Untitled.bmp »

Kiitoksia Chaoswarmille avusta, nyt sain valmiiksi televisioefektin, kommentoida saa ja käyttämisen luvallisuudesta en tiedä, kysykää chaoswarmilta, minun puolesta saa käyttää ilman turhia krediittejä.

Code: Select all

Function televisio()
Repeat
Dot x,y
x=x+1
    If x=ScreenWidth() Then
    y=y+1
    x=0
    EndIf
    Color r,r,r
    r=Rand(255)
   If y >ScreenHeight() Then Exit
Forever
DrawScreen
EndFunction()
alku:
Cls 
televisio()
Goto alku
Intel core i7 3960X 3,9ghz 15mb
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Efektit

Post by Awaclus »

Untitled.bmp wrote:Kiitoksia Chaoswarmille avusta, nyt sain valmiiksi televisioefektin, kommentoida saa ja käyttämisen luvallisuudesta en tiedä, kysykää chaoswarmilta, minun puolesta saa käyttää ilman turhia krediittejä.
En kai minä nyt Esimerkit ja tutoriaalit -alueelle lähettäisi mitään koodeja, joita ei saa käyttää vapaasti. :)

Worm muuten kirjoitetaan o:lla.
User avatar
Misthema
Advanced Member
Posts: 312
Joined: Mon Aug 27, 2007 8:32 pm
Location: Turku, Finland
Contact:

Re: Efektit

Post by Misthema »

Untitled.bmp wrote:Kiitoksia Chaoswarmille avusta, nyt sain valmiiksi televisioefektin, kommentoida saa ja käyttämisen luvallisuudesta en tiedä, kysykää chaoswarmilta, minun puolesta saa käyttää ilman turhia krediittejä.

Code: Select all

Function televisio()
Repeat
Dot x,y
x=x+1
    If x=ScreenWidth() Then
    y=y+1
    x=0
    EndIf
    Color r,r,r
    r=Rand(255)
   If y >ScreenHeight() Then Exit
Forever
DrawScreen
EndFunction()
alku:
Cls 
televisio()
Goto alku

Nopeutin efektiäsi hieman ja tein siitä säädettävän:

Code: Select all

SW = ScreenWidth()
SH = ScreenHeight()

Function televisio(x0%, y0%, w%, h%)
    Lock
    For y=y0 To h-1
        For x=x0 To w-1
            PutPixel2 x, y, Grey( Rand(255) )
        Next x
    Next y
    Unlock
EndFunction

Function Grey%(val%)
    Return val Shl 24 + val Shl 16 + val Shl 8 + val
EndFunction

x0=0:y0=0
x1=SW:y1=SH

Repeat

    televisio(x0,y0, x1,y1)
    
    If MouseHit(1) Then x0=MouseX() : y0=MouseY()
    If MouseHit(2) Then x1=MouseX() : y1=MouseY()
    
    
    DrawScreen

Forever
Untitled.bmp
Member
Posts: 52
Joined: Sat May 12, 2012 7:11 pm
Location: C:/WINDOWS/system32

Re: Efektit

Post by Untitled.bmp »

Misthema wrote:
Untitled.bmp wrote:Kiitoksia Chaoswarmille avusta, nyt sain valmiiksi televisioefektin, kommentoida saa ja käyttämisen luvallisuudesta en tiedä, kysykää chaoswarmilta, minun puolesta saa käyttää ilman turhia krediittejä.

Code: Select all

Function televisio()
Repeat
Dot x,y
x=x+1
    If x=ScreenWidth() Then
    y=y+1
    x=0
    EndIf
    Color r,r,r
    r=Rand(255)
   If y >ScreenHeight() Then Exit
Forever
DrawScreen
EndFunction()
alku:
Cls 
televisio()
Goto alku

Nopeutin efektiäsi hieman ja tein siitä säädettävän:

Code: Select all

SW = ScreenWidth()
SH = ScreenHeight()

Function televisio(x0%, y0%, w%, h%)
    Lock
    For y=y0 To h-1
        For x=x0 To w-1
            PutPixel2 x, y, Grey( Rand(255) )
        Next x
    Next y
    Unlock
EndFunction

Function Grey%(val%)
    Return val Shl 24 + val Shl 16 + val Shl 8 + val
EndFunction

x0=0:y0=0
x1=SW:y1=SH

Repeat

    televisio(x0,y0, x1,y1)
    
    If MouseHit(1) Then x0=MouseX() : y0=MouseY()
    If MouseHit(2) Then x1=MouseX() : y1=MouseY()
    
    
    DrawScreen

Forever
Kiitoksia :D Tuon televisioefektin oli kyllä tarkoitus olla pelkkä harjoittelua ja päätinpä tehdä työstä hupia muille, jotka sitä tarvitsevat, jos tarvitsevat. :)
Intel core i7 3960X 3,9ghz 15mb
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Efektit

Post by MrMonday »

Täytyy sanoa, että kaikkea turhaa sitä cb:llä saakin aikaan :D Esimerkiksi tämä random testailu, jossa varsinaisia koodirivejä alle 30 :o

Code: Select all

SCREEN 800,600

For x = 0 To ScreenWidth() Step 5
For y = 0 To ScreenHeight() Step 5

    Box x, y, 5, 5,0
    
    PickColor x,y-1
    
        up_red      = getRGB(RED)
        up_green    = getRGB(GREEN)
        up_blue     = getRGB(BLUE)
        
    PickColor x,y+1    
            
        down_red    = getRGB(RED)
        down_green  = getRGB(GREEN)
        down_blue   = getRGB(BLUE)
        
    PickColor x-1,y    
            
        left_red    = getRGB(RED)
        left_green  = getRGB(GREEN)
        left_blue   = getRGB(BLUE)
        
    PickColor x+1,y    
            
        right_red   = getRGB(RED)
        right_green = getRGB(GREEN)
        right_blue  = getRGB(BLUE)
            
    new_red = ((up_red + down_red + left_red + right_red)/4)+Rand(0,2)
    new_green = ((up_red + down_green + left_green + right_green)/4)+Rand(0,2)
    new_blue = ((up_blue + down_blue + left_blue + right_blue)/4)+Rand(0,2)

    Color new_red, new_green, new_blue
    
Next y
Next x

DrawScreen
WaitKey
kiva myös täytetyllä boxilla, eli pyyhkäisee vain viimeisen parametrin veks box-komennon kohdalta..
User avatar
Konstaduck
Advanced Member
Posts: 267
Joined: Sat Dec 17, 2011 3:09 pm
Location: Nurmijärvi, Finland
Contact:

Re: Efektit

Post by Konstaduck »

MrMonday wrote:MrMondayn koodinpätkä ja viesti...
Melkoisen hidas se vain on. Pystyykö boxin kohdalla puskuri lukita, jotta piirto olisi nopeampi?
EDIT:

Hmm... Näköjään ei, sillä muuten ruudulla ei näy mitään... :o

Konstaduck.net
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Efektit

Post by MrMonday »

Konstaduck wrote:
MrMonday wrote:MrMondayn koodinpätkä ja viesti...
Melkoisen hidas se vain on. Pystyykö boxin kohdalla puskuri lukita, jotta piirto olisi nopeampi?
EDIT:

Hmm... Näköjään ei, sillä muuten ruudulla ei näy mitään... :o

Lukittuun puskuriin voi käsittääkseni piirustella vain omilla komennoillaan/funktioillaan, mutta tuossa ei hitaus sinänsä haittaa, kun se ei muutenkaan tee mitään järkevää :D
En tiedä miten vauhdilla cbE tuon sitten piirtelisi.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Efektit

Post by koodaaja »

Lukittuun puskuriin voi varsinaisesti siihen tarkoitettujen komentojen lisäksi piirustella Linellä, joka on siten käytettynä huomattavasti nopeampi kuin lukitsematta. Kuvittelin tämän olevan kovin yleistä tietoa :)
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Efektit

Post by MrMonday »

koodaaja wrote:Lukittuun puskuriin voi varsinaisesti siihen tarkoitettujen komentojen lisäksi piirustella Linellä, joka on siten käytettynä huomattavasti nopeampi kuin lukitsematta. Kuvittelin tämän olevan kovin yleistä tietoa :)
Jostain syystä olen onnistunut ohittamaan tuon tiedon :roll: Ehkäpä siksi, etten ole lukittua puskuria koskaan käyttänyt, mutta vikkelä se kyllä verrattain on:

Code: Select all

SCREEN 800,600

begin:

Lock

For x = 0 To ScreenWidth() Step 5
For y = 0 To ScreenHeight() Step 5

    Line x,y,ScreenWidth(),ScreenHeight()
    
    PickColor x,y-1
    
        up_red      = getRGB(RED)
        up_green    = getRGB(GREEN)
        up_blue     = getRGB(BLUE)
        
    PickColor x,y+1    
            
        down_red    = getRGB(RED)
        down_green  = getRGB(GREEN)
        down_blue   = getRGB(BLUE)
        
    PickColor x-1,y    
            
        left_red    = getRGB(RED)
        left_green  = getRGB(GREEN)
        left_blue   = getRGB(BLUE)
        
    PickColor x+1,y    
            
        right_red   = getRGB(RED)
        right_green = getRGB(GREEN)
        right_blue  = getRGB(BLUE)
            
    new_red = ((up_red + down_red + left_red + right_red)/4)+Rand(0,2)
    new_green = ((up_red + down_green + left_green + right_green)/4)+Rand(0,2)
    new_blue = ((up_blue + down_blue + left_blue + right_blue)/4)+Rand(0,2)

    Color new_red, new_green, new_blue
    
Next y
Next x

Unlock

DrawScreen

Goto begin
Post Reply