väritörmäys

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
85 spider
Newcomer
Posts: 35
Joined: Thu Dec 10, 2009 7:01 pm
Location: Vihanti, Alpua

väritörmäys

Post by 85 spider »

Teen peliä, jossa kartat on kuvatiedostoja niin pitäisi saada semmoinen törmäys, että joku
väri olisi seinä ja siitä ei pääsisi läpi.
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: väritörmäys

Post by phons »

Tekemäni tuto joka löytyy K-Pelit sivustolta, hyvää mainosta Jarelle : DD

Edit: Itse asiassa epäilisin että GetPixel2() olisi nopeampi... Eli poistaa esimerkistä: PickImageColor x,y,img ja vaihtaa seuraavista If lausekkeista: GetRGB() -> GetPixel2() <> -16777216
Eli tossa toi -16777216 on musta, eli jos osutaan johonkin muuhun kuin mustaan väriin niin törmätään..
Last edited by phons on Wed Jun 02, 2010 8:54 pm, edited 1 time in total.
Image
User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 10:50 pm

Re: väritörmäys

Post by Knoy »

Tässä olisi laatikko tunnistus väreille.

Siirtää X vanhaksi X ja Y vanhaksi Y jos osuu punaiseen

Code: Select all

X=200
Y=150


Repeat

    Color CbRed 
    Box 0,0,100,100,1

    VanhaX=X
    VanhaY=Y

    X=X+(RightKey()-LeftKey())
    Y=Y-(UpKey()-DownKey())
    
    For i = - 10 To 10
        For ii = -10 To 10
            PickColor X+i,Y+ii
            If getRGB(RED)=255 And getRGB(GREEN)=0 And getRGB(BLUE)=0 Then
                X=VanhaX
                Y=VanhaY
            EndIf 
        Next ii
    Next i
    
    Color CbWhite
    Circle X-10,Y-10,20,1
    
    DrawScreen
    
Forever 
User avatar
85 spider
Newcomer
Posts: 35
Joined: Thu Dec 10, 2009 7:01 pm
Location: Vihanti, Alpua

Re: väritörmäys

Post by 85 spider »

okei, kiitti vastauksista
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: väritörmäys

Post by MaGetzUb »

Tässä on funktio, jolla voi tarkistaa onko lukitulla näytöllä/kuvalla oleva piste muuta kuin mustaa. :)

Code: Select all

Function TestPoint(x, y, buffer)
        Return GetPixel2(x, y, buffer) <> -16777216
EndFunction 
Tässä on taas funktio, jolla tarkistetaan että onko testauskohdan väri eri kuin haluttu väri:

Code: Select all

Function TestPoint(x, y, buffer, r, g, b)
        Return GetPixel2(x, y, buffer) <> (b + g shl 8 + r shl 16)
Endfunction
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Herra HoOpO
Newcomer
Posts: 36
Joined: Fri Mar 20, 2009 3:29 pm

Re: väritörmäys

Post by Herra HoOpO »

Mutta entäs jos pitäisikin käyttää maailmankoordinaatteja ruudunkoordinaattien sijasta ?!
Itselläni nimittäin on tullut projussani sellainen probleema... :cry:
(\__/)
(='.'=)
(")_(")
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: väritörmäys

Post by phons »

Herra HoOpO wrote:Mutta entäs jos pitäisikin käyttää maailmankoordinaatteja ruudunkoordinaattien sijasta ?!
Itselläni nimittäin on tullut projussani sellainen probleema... :cry:
Siksi onkin tehty tällaiset:

Code: Select all

Function SXtoworldX(mx)
    Return mx-CameraX()+ScreenWidth()/2
EndFunction

Function SYtoworldY(my)
    Return -my+CameraY()+ScreenHeight()/2
EndFunction
Tosin se on huono tapa...
Mielummin piirrät kuvan maailmaan, DrawToWorld OFF,ON
Tosin silloin GetPixel ei toimi ellet muunna koordinaatteja world -> screen näillä:

Code: Select all

Function ObjectSX(obj)
    Return ObjectX(obj)+ScreenWidth()/2-CameraX()
EndFunction

Function ObjectSY(obj)
    Return -ObjectY(obj)+ScreenHeight()/2+CameraY()
EndFunction
Image
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: väritörmäys

Post by MaGetzUb »

Itseasiassa, jos lukitset ruudun, et voi tarkistaa muutakuin ruudun sisäpuolella olevia pikseleitä, muuten tulee mav. Sen takia suosittelen, että maailma olisi kuva. Niin kuvan pikseleitä voitaisiin tarkistaa ruudun ulkopuoleltakin.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: väritörmäys

Post by esa94 »

MaGetzUb wrote:Itseasiassa, jos lukitset ruudun, et voi tarkistaa muutakuin ruudun sisäpuolella olevia pikseleitä, muuten tulee mav. Sen takia suosittelen, että maailma olisi kuva. Niin kuvan pikseleitä voitaisiin tarkistaa ruudun ulkopuoleltakin.
Jolloin siis tietysti lukittaisiin kuva ja käsiteltäisiin kuvan pikseleitä eikä ruudun.
Post Reply