3D autopelille pohjaa

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
Rasaari

3D autopelille pohjaa

Post by Rasaari »

Näin ja luin tuon koodaajan tekemän 3d-oppaan ja tein sen pohjalta Line3d-funktion.
Pienen säätämisen jälkeen sain aikaan 3d-tunnelin jossa voisi vaikka autolla
ajella. se on tylsän kaksivärinen enkä itse ainakaa vielä jaksa alkaa siitä mitään
suurempaa tekemään.

näppäimet:
ylänuoli..........Kaasu
alanuoli.........Jarru/pakki(voi pakittaa pois tunnelissa-bugi)
sinuvuolet......liikutaan sivuttaissuunnassa

Olkaa hyvät.

Code: Select all

SCREEN 800,600
FrameLimit 40

'auton nopeus(nopeus jolla viivat tulee päin näköä)
speed# = 1

'tyyppi seinille
Type seina
	Field x#
	Field y#
	Field z#
	Field korkeus#
EndType

'määrä, paljonko autoa ohjataan sivulle
steerx# = 0

'seinät vasemmalle puolelle
For i = 1 To 15
	uusiseina.seina = New(seina)
	uusiseina\x = steerx + 7
	uusiseina\y = -5
	uusiseina\z = -5 * i
	uusiseina\korkeus = 10
Next i

'seinä oikealle puolelle
For i = 1 To 15
	uusiseina.seina = New(seina)
	uusiseina\x = steerx - 7
	uusiseina\y = -5
	uusiseina\z = -5 * i
	uusiseina\korkeus = 10
Next i


Repeat
steerx# = 0

If UpKey() Then speed = speed + 0.02
If DownKey() Then speed = speed - 0.02
If LeftKey() Then steerx = -0.1
If RightKey() Then steerx = 0.1  


For iseina.seina = Each seina
	iseina\z = iseina\z + speed
	
	'jos seinä tulee tarpeeksi lähelle siirretään se kauemmas
	If iseina\z > -2 Then iseina\z = -75
	
	iseina\x = iseina\x + steerx
	
	'piirretään pystysuorassa olevat viivat
	line3d( iseina\x, iseina\y, iseina\z, iseina\x, iseina\y + iseina\korkeus, iseina\z )
	
	'piirretään vaakasuorassa olevat viivat
	line3d( iseina\x, iseina\y, iseina\z, iseina\x, iseina\y, iseina\z + 10 )
Next iseina



DrawScreen
Forever


Function line3D( x#, y#, z#, x2#, y2#, z2# )
    If z# > 0 Then Return 0
    If z# = 0 Then z# = -0.01
   

    p_s# = (1/z#)*100
   
    sx = x# * p_s# + ScreenWidth()/2
    sy = y# * p_s# + ScreenHeight()/2
'----------------------

    If z2# > 0 Then Return 0
    If z2# = 0 Then z2# = -0.01
   
   
    p_s2# = (1/z2#)*100
   
    sx2 = x2# * p_s2# + ScreenWidth()/2
    sy2 = y2# * p_s2# + ScreenHeight()/2

'------------------------

	Line sx,sy,sx2,sy2
EndFunction
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: 3D autopelille pohjaa

Post by koodaaja »

Kattos, sehän on hieno systeemi. Tuohon iskee vaan 2D-spritejä autoiksi : D

Mutta hieman pitkä se on. Tein suunnilleen saman efektin hieman lyhyempänä:

Code: Select all

pos# = 0
xx# = 0

Repeat
    
    For x# = pos# To -50 Step -2
        Line3D( xx-2, -1, x, xx-2, 1, x )
        Line3D( xx+2, -1, x, xx+2, 1, x )
    Next x#
    
    pos = pos + 0.15
    xx = Sin(pos*5)
    
    Line3D(xx-2, -1, 0, xx-2, -1, -50)
    Line3D(xx+2, -1, 0, xx+2, -1, -50)
    Line3D(xx-2, 1, 0, xx-2, 1, -50)
    Line3D(xx+2, 1, 0, xx+2, 1, -50)
    
    DrawScreen
Forever

Function line3D( x#, y#, z#, x2#, y2#, z2# )
    If z# > 0 Then Return 0
    If z# = 0 Then z# = -0.01
   

    p_s# = (1/z#)*100
   
    sx = x# * p_s# + ScreenWidth()/2
    sy = y# * p_s# + ScreenHeight()/2
'----------------------

    If z2# > 0 Then Return 0
    If z2# = 0 Then z2# = -0.01
   
   
    p_s2# = (1/z2#)*100
   
    sx2 = x2# * p_s2# + ScreenWidth()/2
    sy2 = y2# * p_s2# + ScreenHeight()/2

'------------------------

   Line sx,sy,sx2,sy2
EndFunction 
Mr.Demolition
Newcomer
Posts: 21
Joined: Tue Aug 28, 2007 6:54 am

Re: 3D autopelille pohjaa

Post by Mr.Demolition »

Rasaari wrote:Näin ja luin tuon koodaajan tekemän 3d-oppaan ja tein sen pohjalta Line3d-funktion.
Pienen säätämisen jälkeen sain aikaan 3d-tunnelin jossa voisi vaikka autolla
ajella. se on tylsän kaksivärinen enkä itse ainakaa vielä jaksa alkaa siitä mitään
suurempaa tekemään.

näppäimet:
ylänuoli..........Kaasu
alanuoli.........Jarru/pakki(voi pakittaa pois tunnelissa-bugi)
sinuvuolet......liikutaan sivuttaissuunnassa

Olkaa hyvät.

Code: Select all

SCREEN 800,600
FrameLimit 40

'auton nopeus(nopeus jolla viivat tulee päin näköä)
speed# = 1

'tyyppi seinille
Type seina
	Field x#
	Field y#
	Field z#
	Field korkeus#
EndType

'määrä, paljonko autoa ohjataan sivulle
steerx# = 0

'seinät vasemmalle puolelle
For i = 1 To 15
	uusiseina.seina = New(seina)
	uusiseina\x = steerx + 7
	uusiseina\y = -5
	uusiseina\z = -5 * i
	uusiseina\korkeus = 10
Next i

'seinä oikealle puolelle
For i = 1 To 15
	uusiseina.seina = New(seina)
	uusiseina\x = steerx - 7
	uusiseina\y = -5
	uusiseina\z = -5 * i
	uusiseina\korkeus = 10
Next i


Repeat
steerx# = 0

If UpKey() Then speed = speed + 0.02
If DownKey() Then speed = speed - 0.02
If LeftKey() Then steerx = -0.1
If RightKey() Then steerx = 0.1  


For iseina.seina = Each seina
	iseina\z = iseina\z + speed
	
	'jos seinä tulee tarpeeksi lähelle siirretään se kauemmas
	If iseina\z > -2 Then iseina\z = -75
	
	iseina\x = iseina\x + steerx
	
	'piirretään pystysuorassa olevat viivat
	line3d( iseina\x, iseina\y, iseina\z, iseina\x, iseina\y + iseina\korkeus, iseina\z )
	
	'piirretään vaakasuorassa olevat viivat
	line3d( iseina\x, iseina\y, iseina\z, iseina\x, iseina\y, iseina\z + 10 )
Next iseina



DrawScreen
Forever


Function line3D( x#, y#, z#, x2#, y2#, z2# )
    If z# > 0 Then Return 0
    If z# = 0 Then z# = -0.01
   

    p_s# = (1/z#)*100
   
    sx = x# * p_s# + ScreenWidth()/2
    sy = y# * p_s# + ScreenHeight()/2
'----------------------

    If z2# > 0 Then Return 0
    If z2# = 0 Then z2# = -0.01
   
   
    p_s2# = (1/z2#)*100
   
    sx2 = x2# * p_s2# + ScreenWidth()/2
    sy2 = y2# * p_s2# + ScreenHeight()/2

'------------------------

	Line sx,sy,sx2,sy2
EndFunction
Löysin tuosta mukavan bugin: Jos kiihdyttää jonkin aikaa, kamera hidastuu :? Eihän se nyt vakavaa ole, mutta jos käyttää pelin pohjana, ja sitten kiihdyttää, huomaakin tulevansa vikaksi xD
Rasaari

Re: 3D autopelille pohjaa

Post by Rasaari »

Meikä putos kyydistä ku koodaaja lisäs sinne jotain ynnä-laskua mutkikkaampaa mutta hieno on.
Itellä tuli ongelmia törmäyksen kans nii jätin kokonaan sen pois omasta koodista. Sitte yks
hieno ominaisuus ois kans se että tie mutkittelis. Sillon kyllä sais olla jo jotain tekstuuria
seinässä. Ylä- ja alamäetkään ei varmaan pahoja olis tehä.

jotain muuta mitä ois kiva nähä tossa ois jotenki auton käyttäytymistä vastaavat
fysiikat että ois mahollista esim. driftata mutkissa...
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: 3D autopelille pohjaa

Post by koodaaja »

Mr.Demolition wrote:
Rasaari wrote:
Löysin tuosta mukavan bugin: Jos kiihdyttää jonkin aikaa, kamera hidastuu :? Eihän se nyt vakavaa ole, mutta jos käyttää pelin pohjana, ja sitten kiihdyttää, huomaakin tulevansa vikaksi xD
Ei se hidastu. Joka framessa mennään niin paljon eteenpäin, että suunnilleen siinä, missä äsken oli seinä, on jo seuraava seinä. Vastaava efekti on autojen pyörissä ja helipoppelin roottorissa, jos olet niitä ikinä katsellut. Mietihän: jos pyörä pyörähtää framessa 361 astetta, sehän näyttää kääntyneen 1 asteen. Ja kyllä, vastaava illuusio tulee myös tosielämässä.
MAVmaggot
Advanced Member
Posts: 468
Joined: Fri Aug 31, 2007 10:18 pm
Location: bitspace

Re: 3D autopelille pohjaa

Post by MAVmaggot »

Hienohan tuo :ugeek:
User avatar
elmo123
Active Member
Posts: 153
Joined: Sun Sep 09, 2007 4:19 pm

Re: 3D autopelille pohjaa

Post by elmo123 »

Tässä voi kurvata seinän läpi joten esikatselkaa tunnelia sivulta! :D
Kiinnostuin pelien tekemisestä ennen 1. luokkaa.
Sitten 3. luokalla tuli CB. Ja siitä se alkoi.

Blender! TF2! CB! Game Maker! Nokia-mollaus! Kitaransoitto! Breakdance! MadTracker! Minecraft!
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: 3D autopelille pohjaa

Post by Sami345 »

Muokkasin niin sain väritettyä seinät.
Tässä koodi:

Code: Select all

    SCREEN 800,600
    FrameLimit 40

    'auton nopeus(nopeus jolla viivat tulee päin näköä)
    speed# = 1

    'tyyppi seinille
    Type seina
       Field x#
       Field y#
       Field z#
       Field korkeus#
    EndType

    'määrä, paljonko autoa ohjataan sivulle
    steerx# = 0

    'seinät vasemmalle puolelle
    For i = 1 To 16
       uusiseina.seina = New(seina)
       uusiseina\x = steerx + 7
       uusiseina\y = -5
       uusiseina\z = -5 * i
       uusiseina\korkeus = 10
    Next i

    'seinä oikealle puolelle
    For i = 1 To 16
       uusiseina.seina = New(seina)
       uusiseina\x = steerx - 7
       uusiseina\y = -5
       uusiseina\z = -5 * i
       uusiseina\korkeus = 10
    Next i


    Repeat
    Text 0,0,FPS()
    steerx# = 0

    If UpKey() Then speed = speed + 0.02
    If DownKey() Then speed = speed - 0.02
    If LeftKey() Then steerx = -0.1
    If RightKey() Then steerx = 0.1 
    i = 0
    For iseina.seina = Each seina

        i+1
       iseina\z = iseina\z + speed
       'jos seinä tulee tarpeeksi lähelle siirretään se kauemmas
       If iseina\z > -1 Then iseina\z = -75
       
       iseina\x = iseina\x + steerx
        If Not i Mod 2 Then 
            Color cbred
        Else
            Color cbwhite
        EndIf
        For j# = 0 To 25
       'piirretään pystysuorassa olevat viivat
       line3d( iseina\x, iseina\y, iseina\z-j/5, iseina\x, iseina\y + iseina\korkeus, iseina\z -j/5)
       Next j#
       'piirretään vaakasuorassa olevat viivat
       line3d( iseina\x, iseina\y, iseina\z, iseina\x, iseina\y, iseina\z + 10 )
    Next iseina



    DrawScreen
    Forever


    Function line3D( x#, y#, z#, x2#, y2#, z2# )
        If z# > 0 Then Return 0
        If z# = 0 Then z# = -0.01
       

        p_s# = (1/z#)*100
       
        sx = x# * p_s# + ScreenWidth()/2
        sy = y# * p_s# + ScreenHeight()/2
    '----------------------

        If z2# > 0 Then Return 0
        If z2# = 0 Then z2# = -0.01
       
       
        p_s2# = (1/z2#)*100
       
        sx2 = x2# * p_s2# + ScreenWidth()/2
        sy2 = y2# * p_s2# + ScreenHeight()/2

    '------------------------

       Line sx,sy,sx2,sy2
    EndFunction
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Herra HoOpO
Newcomer
Posts: 36
Joined: Fri Mar 20, 2009 3:29 pm

Re: 3D autopelille pohjaa

Post by Herra HoOpO »

Tässä hieman muokattu koodi:

Code: Select all

SCREEN 800,600
FrameLimit 40
'tyyppi seinille
Type seina
   Field x#
   Field y#
   Field z#
   Field korkeus#
EndType

////////////////// auton muuttujat \\\\\\\\\\\\\\\\\\\

'määrä, paljonko autoa ohjataan sivulle
steerx# = 0
'auton nopeus(nopeus jolla viivat tulee päin näköä)
speed# = 0.0
'auton sijainti X akselilla
x#=0

//////////////////// Tie \\\\\\\\\\\\\\\\\\\\
Const tie_lev = 7
Const tie_kork = 10

'seinät vasemmalle puolelle
For i = 1 To 16
   uusiseina.seina = New(seina)
   uusiseina\x = steerx + tie_lev
   uusiseina\y = -5
   uusiseina\z = -5 * i
   uusiseina\korkeus = tie_kork
Next i

'seinä oikealle puolelle
For i = 1 To 16
   uusiseina.seina = New(seina)
   uusiseina\x = steerx - tie_lev
   uusiseina\y = -5
   uusiseina\z = -5 * i
   uusiseina\korkeus = 10
Next i

Const ACCELERATION# = 0.02
Const MAXSPEED# = 1.0
Const BRAKE# = 0.02
Const SLOW_DOWN# = 0.01

Repeat

    Text 0,0,FPS()

/////////////////// kaasu ja jarru \\\\\\\\\\\\\\\\\\\\\\\\
    If UpKey() Then
        speed = Min(speed + ACCELERATION,MAXSPEED)
    Else
        If DownKey() Then
            speed = Max(0,speed - BRAKE)
        Else
            speed = Max(0,speed - SLOW_DOWN)
        EndIf
    EndIf
    
/////////////////// ohjaus \\\\\\\\\\\\\\\\\\\\\\\\
    
    If LeftKey() Then
        If speed > 0  And cantsteer <> -1 Then
            steerx = Max(steerx - 0.05,-7)
        EndIf
    Else
        If speed > 0 And cantsteer <> 1 Then
            If RightKey() Then
                steerx = Min(steerx + 0.05,7)
            ElseIf steerx => 0
                steerx = Max(steerx - 0.05,0)
            ElseIf steerx =< 0
                steerx = Min(steerx + 0.02,0)
            EndIf
        EndIf
    EndIf
    
/////////////////// törmäys seiniin \\\\\\\\\\\\\\\\\\\

    x=x+steerx'päivitetään sijainti
    If x =< -tie_lev + 3 Then
        cantsteer = -1
        steerx# = 0
    ElseIf x => tie_lev - 3 Then
        cantsteer = 1
        steerx# = 0
    Else
        cantsteer = 0
    EndIf
    
////////////////// piirretään seinät \\\\\\\\\\\\\\\\\\\

    i = 0
    For iseina.seina = Each seina

        i+1
       iseina\z = iseina\z + speed
       'jos seinä tulee tarpeeksi lähelle siirretään se kauemmas
       If iseina\z > -1 Then iseina\z = -75
       
       iseina\x = iseina\x + steerx
        If Not i Mod 2 Then 
            Color cbred
        Else
            Color cbwhite
        EndIf
        For j# = 0 To 25
       'piirretään pystysuorassa olevat viivat
       line3d( iseina\x, iseina\y, iseina\z-j/5, iseina\x, iseina\y + iseina\korkeus, iseina\z -j/5)
       Next j#
       'piirretään vaakasuorassa olevat viivat
       line3d( iseina\x, iseina\y, iseina\z, iseina\x, iseina\y, iseina\z + 10 )
    Next iseina



    DrawScreen
Forever


Function line3D( x#, y#, z#, x2#, y2#, z2# )
    If z# > 0 Then Return 0
    If z# = 0 Then z# = -0.01
   

    p_s# = (1/z#)*100
   
    sx = x# * p_s# + ScreenWidth()/2
    sy = y# * p_s# + ScreenHeight()/2
'----------------------

    If z2# > 0 Then Return 0
    If z2# = 0 Then z2# = -0.01
   
   
    p_s2# = (1/z2#)*100
   
    sx2 = x2# * p_s2# + ScreenWidth()/2
    sy2 = y2# * p_s2# + ScreenHeight()/2

'------------------------

   Line sx,sy,sx2,sy2
EndFunction 
Muokattu:
*Ohjaus muutettu kiihtyväksi.
*Kaasu muutettu vapautettaessa hidastuvaksi.
*Pakki poistettu.
*radan leveys ja korkeus muutettu vakioon muokkausta varten.

Lisätty:
*joninlainen törmäys seiniin.
EDIT:

Wingman wrote:
Herra HoOpO wrote:Tässä hieman muokattu koodi:

Code: Select all

Koodia...
Hienoa, huomasin yhden bugin, kun yrittää mennä seinän toiselle puolelle, liikutkin toiseen suuntaan, jonka jälkeen voit ajaa vähän matkaa ulos tunnelista toiselle puolelle...
Bugi korjattu[/edit]
Last edited by Herra HoOpO on Sat Mar 27, 2010 1:23 pm, edited 2 times in total.
(\__/)
(='.'=)
(")_(")
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: 3D autopelille pohjaa

Post by Wingman »

Herra HoOpO wrote:Tässä hieman muokattu koodi:

Code: Select all

SCREEN 800,600
FrameLimit 40
'tyyppi seinille
Type seina
   Field x#
   Field y#
   Field z#
   Field korkeus#
EndType

////////////////// auton muuttujat \\\\\\\\\\\\\\\\\\\

'määrä, paljonko autoa ohjataan sivulle
steerx# = 0
'auton nopeus(nopeus jolla viivat tulee päin näköä)
speed# = 0.0
'auton sijainti X akselilla
x#=0

//////////////////// Tie \\\\\\\\\\\\\\\\\\\\
Const tie_lev = 7
Const tie_kork = 10

Const reuna_kimmoisuus# = 0.1
'seinät vasemmalle puolelle
For i = 1 To 16
   uusiseina.seina = New(seina)
   uusiseina\x = steerx + tie_lev
   uusiseina\y = -5
   uusiseina\z = -5 * i
   uusiseina\korkeus = tie_kork
Next i

'seinä oikealle puolelle
For i = 1 To 16
   uusiseina.seina = New(seina)
   uusiseina\x = steerx - tie_lev
   uusiseina\y = -5
   uusiseina\z = -5 * i
   uusiseina\korkeus = 10
Next i

Const ACCELERATION# = 0.02
Const MAXSPEED# = 1.0
Const BRAKE# = 0.02
Const SLOW_DOWN# = 0.01

Repeat

    Text 0,0,FPS()

/////////////////// kaasu ja jarru \\\\\\\\\\\\\\\\\\\\\\\\

    If UpKey() Then
        speed = Min(speed + ACCELERATION,MAXSPEED)
    Else
        If DownKey() Then
            speed = Max(0,speed - BRAKE)
        Else
            speed = Max(0,speed - SLOW_DOWN)
        EndIf
    EndIf
    
/////////////////// ohjaus \\\\\\\\\\\\\\\\\\\\\\\\
    
    If LeftKey() Then
        If speed > 0 Then
            steerx = Max(steerx - 0.05,-7)
        EndIf
    Else
        If speed > 0 Then
            If RightKey() Then
                steerx = Min(steerx + 0.05,7)
            ElseIf steerx => 0
                steerx = Max(steerx - 0.05,0)
            ElseIf steerx =< 0
                steerx = Min(steerx + 0.02,0)
            EndIf
        EndIf
    EndIf
    
/////////////////// törmäys seiniin \\\\\\\\\\\\\\\\\\\

    x=x+steerx'päivitetään sijainti
    If x =< -tie_lev + 3 Then
        steerx# = reuna_kimmoisuus 
    EndIf
    If x => tie_lev - 3 Then
        steerx# = -reuna_kimmoisuus
    EndIf
    
////////////////// piirretään seinät \\\\\\\\\\\\\\\\\\\

    i = 0
    For iseina.seina = Each seina

        i+1
       iseina\z = iseina\z + speed
       'jos seinä tulee tarpeeksi lähelle siirretään se kauemmas
       If iseina\z > -1 Then iseina\z = -75
       
       iseina\x = iseina\x + steerx
        If Not i Mod 2 Then 
            Color cbred
        Else
            Color cbwhite
        EndIf
        For j# = 0 To 25
       'piirretään pystysuorassa olevat viivat
       line3d( iseina\x, iseina\y, iseina\z-j/5, iseina\x, iseina\y + iseina\korkeus, iseina\z -j/5)
       Next j#
       'piirretään vaakasuorassa olevat viivat
       line3d( iseina\x, iseina\y, iseina\z, iseina\x, iseina\y, iseina\z + 10 )
    Next iseina



    DrawScreen
Forever


Function line3D( x#, y#, z#, x2#, y2#, z2# )
    If z# > 0 Then Return 0
    If z# = 0 Then z# = -0.01
   

    p_s# = (1/z#)*100
   
    sx = x# * p_s# + ScreenWidth()/2
    sy = y# * p_s# + ScreenHeight()/2
'----------------------

    If z2# > 0 Then Return 0
    If z2# = 0 Then z2# = -0.01
   
   
    p_s2# = (1/z2#)*100
   
    sx2 = x2# * p_s2# + ScreenWidth()/2
    sy2 = y2# * p_s2# + ScreenHeight()/2

'------------------------

   Line sx,sy,sx2,sy2
EndFunction 
Muokattu:
*Ohjaus muutettu kiihtyväksi.
*Kaasu muutettu vapautettaessa hidastuvaksi.
*Pakki poistettu.
*radan leveys ja korkeus muutettu vakioon muokkausta varten.

Lisätty:
*joninlainen törmäys seiniin.
Hienoa, huomasin yhden bugin, kun yrittää mennä seinän toiselle puolelle, liikutkin toiseen suuntaan, jonka jälkeen voit ajaa vähän matkaa ulos tunnelista toiselle puolelle...
- - - -
User avatar
Kille
Active Member
Posts: 249
Joined: Wed Aug 26, 2009 3:50 pm
Location: Juankoski

Re: 3D autopelille pohjaa

Post by Kille »

Minulla ei toimi. Kun yritän ajaa koodin, tulee ilmoitus:

Code: Select all

"An error occurred becasue of the following reason:

52: "Bad file name or number"

If this problem stays, try to restart  Coolbasic.

Please make sure you save your sources before doing so.
ZEPPELIN
Jatkoa tulossa... tällä kertaa lataus ei kestä viikkoa
Herra HoOpO
Newcomer
Posts: 36
Joined: Fri Mar 20, 2009 3:29 pm

Re: 3D autopelille pohjaa

Post by Herra HoOpO »

Minulla se pyörii ihan hyvin... Taitaa olla sinulla coolbasicissa vika. :?
(\__/)
(='.'=)
(")_(")
User avatar
Execute
Active Member
Posts: 110
Joined: Fri Feb 11, 2011 6:41 pm

3D autopelille pohjaa

Post by Execute »

Lisäsin jotain mukavaa... Nopeusmittarin. (Kuinka monta metriä auto kulkee sekunnissa) Sitten vielä superspeedin! se aktivoituu pitämällä välilyöntiä painettuna... (Katsokaapa silloin nopeusmittariin... :lol: ) Sain seinät värjäytymään silloin vihreiksi. (Ei ole bugi vaan tarkoituksella tehty efekti) Siitä vain kokeilemaan! :twisted:

Code: Select all

SCREEN 800,600
FrameLimit 40
'tyyppi seinille
Type seina
   Field x#
   Field y#
   Field z#
   Field korkeus#
EndType

linel = 0

////////////////// auton muuttujat \\\\\\\\\\\\\\\\\\\

'määrä, paljonko autoa ohjataan sivulle
steerx# = 0
'auton nopeus(nopeus jolla viivat tulee päin näköä)
speed# = 0.0
'auton sijainti X akselilla
x#=0

//////////////////// Tie \\\\\\\\\\\\\\\\\\\\
Const tie_lev = 7
Const tie_kork = 10

'seinät vasemmalle puolelle
For i = 1 To 16
   uusiseina.seina = New(seina)
   uusiseina\x = steerx + tie_lev
   uusiseina\y = -5
   uusiseina\z = -5 * i
   uusiseina\korkeus = tie_kork
Next i

'seinä oikealle puolelle
For i = 1 To 16
   uusiseina.seina = New(seina)
   uusiseina\x = steerx - tie_lev
   uusiseina\y = -5
   uusiseina\z = -5 * i
   uusiseina\korkeus = 10
Next i

Const ACCELERATION# = 0.02
Const MAXSPEED# = 1.0
Const BRAKE# = 0.02
Const SLOW_DOWN# = 0.01
Const SUPERSPEED# = 1.7

Repeat

    Text 0,0,FPS()

/////////////////// kaasu ja jarru \\\\\\\\\\\\\\\\\\\\\\\\
    If UpKey() Then
        speed = Min(speed + ACCELERATION,MAXSPEED)
    Else
        If DownKey() Then
            speed = Max(0,speed - BRAKE)
        Else
            speed = Max(0,speed - SLOW_DOWN)
        EndIf
    EndIf
    
    If KeyDown(57) Then 
    speed = Max(speed + ACCELERATION,SUPERSPEED)
    linel = 1
    EndIf
    
    If KeyUp(57) Then 
    linel = 0
    speed = Max(0,speed - SLOW_DOWN)
    EndIf 
/////////////////// ohjaus \\\\\\\\\\\\\\\\\\\\\\\\
    
    If LeftKey() Then
        If speed > 0  And cantsteer <> -1 Then
            steerx = Max(steerx - 0.05,-7)
        EndIf
    Else
        If speed > 0 And cantsteer <> 1 Then
            If RightKey() Then
                steerx = Min(steerx + 0.05,7)
            ElseIf steerx => 0
                steerx = Max(steerx - 0.05,0)
            ElseIf steerx =< 0
                steerx = Min(steerx + 0.02,0)
            EndIf
        EndIf
    EndIf
    
/////////////////// törmäys seiniin \\\\\\\\\\\\\\\\\\\

    x=x+steerx'päivitetään sijainti
    If x =< -tie_lev + 3 Then
        cantsteer = -1
        steerx# = 0
    ElseIf x => tie_lev - 3 Then
        cantsteer = 1
        steerx# = 0
    Else
        cantsteer = 0
    EndIf
    
////////////////// piirretään seinät \\\\\\\\\\\\\\\\\\\

    i = 0
    For iseina.seina = Each seina

        i+1
       iseina\z = iseina\z + speed
       'jos seinä tulee tarpeeksi lähelle siirretään se kauemmas
       If iseina\z > -1 Then iseina\z = -75
       
       iseina\x = iseina\x + steerx
        If Not i Mod 2 Then 
            Color cbred
        Else
            Color cbwhite
        EndIf
        If linel = 1 Then 
        Color cbgreen
        EndIf 
        For j# = 0 To 25
       'piirretään pystysuorassa olevat viivat
       line3d( iseina\x, iseina\y, iseina\z-j/5, iseina\x, iseina\y + iseina\korkeus, iseina\z -j/5)
       Next j#
       'piirretään vaakasuorassa olevat viivat
       line3d( iseina\x, iseina\y, iseina\z, iseina\x, iseina\y, iseina\z + 10 )
    Next iseina

If linel = 1 Then 
Text 0,20, "Speed: ??????????????? m.s"
Else 
Text 0,20, "Speed: " +speed+ " m.s"
EndIf 

    DrawScreen
Forever


Function line3D( x#, y#, z#, x2#, y2#, z2# )
    If z# > 0 Then Return 0
    If z# = 0 Then z# = -0.01
   

    p_s# = (1/z#)*100
   
    sx = x# * p_s# + ScreenWidth()/2
    sy = y# * p_s# + ScreenHeight()/2
'----------------------

    If z2# > 0 Then Return 0
    If z2# = 0 Then z2# = -0.01
   
   
    p_s2# = (1/z2#)*100
   
    sx2 = x2# * p_s2# + ScreenWidth()/2
    sy2 = y2# * p_s2# + ScreenHeight()/2

'------------------------

   Line sx,sy,sx2,sy2
EndFunction 
SpaceCraft on kokopitkä peli! Nyt ladattavissa! Tsekkaa!
Post Reply