Page 137 of 154

Re: Tyhmät kysymykset

Posted: Sun Apr 05, 2009 11:21 pm
by Jonez
matti3 wrote:Tämä kävisi varmaan nopeammin kloonaamalla, mutta päätin nyt ensin koittaa niin, että autot ovat kaikki oma objectinsa. (20 tällä hetkellä)

...
Kyseinen systeemi on _lähes_ mahdotonta tehdä niin, että jokainen objekti on oma, erillinen systeeminsä. Tässä tapauksessa sinun täytyy käyttää esimerkiksi tyyppilohkoja hallitaksesi autoja.

Eli: teet yhden koodinpätkän joka liikuttaa autoja ja pitää ne ruudun sisällä tiettyjen sääntöjen mukaan, ja sitten yksinkertaisesti kloonaat autoja ja käsket jokaista (autoa) käyttämään tätä samaa koodinpätkää.

Tein tässä osaksi omaksi ilokseni ja osaksi esimerkkinä sinulle tällaisen pienen koodin, jossa liikkuu tietty määrä autoja. Jos auto tulee kohdallesi, se pysähtyy. Kun painat enteriä, ukko menee autoon ja sitä voi ajaa. Uudelleen enteriä ja ukko poistuu autosta (ja sinne taianomaisesti tulee uusi kuski, koska se jatkaa itsestään matkaansa).

En käyttänyt juuri ollenkaan vakioita, koska en vain jaksanut. En myöskään kommentoinut. Jos et mitenkään saa yhtään selvää koodista, suosittelen opettelemaan tyypit ihan alusta alkaen, ellet et jo ole opetellut. Samoin taulukot.

Tässä oli hiukan tarinaa ja turhaa turinaa. Toivottavasti opit jotain koodista.

Code: Select all

SCREEN 1024, 768
FrameLimit 40

Const WP_AMOUNT = 30

Dim dWaypoints( WP_AMOUNT - 1, 1 )

Type cars
    Field obj
    Field user
    
    Field targetTimer
    Field targetX
    Field targetY
    Field speed As Float
End Type

objCar = LoadObject( "media\car2.bmp", 72 )
ShowObject objCar, OFF

For i = 1 To WP_AMOUNT
    dWaypoints( i, 0 ) = Rand( -ScreenWidth() / 2, ScreenWidth() / 2 ) //x
    dWaypoints( i, 1 ) = Rand( -ScreenHeight() / 2, ScreenHeight() / 2 ) //y
Next i

For i = 1 To 10
    nc.cars = New( cars )
    nc\obj = CloneObject( objCar )
    target = Rand( 0, WP_AMOUNT - 1 )
    nc\targetX = dWaypoints( target, 0 ) 
    nc\targetY = dWaypoints( target, 1 ) 
    PositionObject nc\obj, Rand( -ScreenWidth() / 2, ScreenWidth() / 2 ), Rand( -ScreenHeight() / 2, ScreenHeight() / 2 )
Next i

ClsColor cbWhite
Color cbBlack
Repeat
    
    If bInCar = False Then
        plX = plX + ( RightKey() - LeftKey() ) * 5
        plY = plY + ( UpKey() - DownKey() ) * 5
        DrawToWorld ON, ON, ON
            Box plX - 2, plY - 2, 5, 5
        DrawToWorld OFF
    EndIf
    
    For ic.cars = Each cars

        _angle# = ObjectAngle( ic\obj )    
    
        If ic\user = 0 Then
            
            If Distance( ObjectX( ic\obj ), ObjectY( ic\obj ), plX, plY ) < 30 And bInCar = False Then
                If ic\speed > 0 Then
                    ic\speed - 0.5
                EndIf
                
                If KeyHit( CbKeyReturn ) And bInCar = False Then
                    ic\user = 1
                    bInCar = True
                    ClearKeys()
                EndIf
            Else
                If ic\speed < 5 Then
                    ic\speed + 0.5
                EndIf
            EndIf
            
            ic\targetTimer - 1
            If Distance( ObjectX( ic\obj ), ObjectY( ic\obj ), ic\targetX, ic\targetY ) < 10 Or ic\targetTimer <= 0 Then
                ic\targetTimer = 300
                While True
                    target = Rand( 0, WP_AMOUNT - 1 )
                    If dWaypoints( target, 0 ) <> ic\targetX Or dWaypoints( target, 1 ) <> ic\targetY Then
                        
                        ic\targetX = dWaypoints( target, 0 ) 
                        ic\targetY = dWaypoints( target, 1 ) 
                        Exit
                    EndIf
                Wend
            EndIf
            
            If ic\speed = 5 Then
                _targetAngle# = GetAngle( ObjectX( ic\obj ), -ObjectY( ic\obj ), ic\targetX, -ic\targetY )
                RotateObject ic\obj, CurveAngle( _targetAngle, _angle, 20 )
            EndIf
            
        Else
            If KeyHit( CbKeyReturn ) Then
                bInCar = False
                ic\user = 0
                plX = ObjectX( ic\obj ) - Cos( _angle + 90 ) * 20
                plY = ObjectY( ic\obj ) - Sin( _angle + 90 ) * 20
            EndIf
            If UpKey() Then
                ic\speed + 0.5
            Else
                ic\speed - 0.5
            EndIf
            
            TurnObject ic\obj, ( LeftKey() - RightKey() ) * 5            
        EndIf
        
        If ic\speed < 0 Then ic\speed = 0
        If ic\speed > 5 Then ic\speed = 5
        MoveObject ic\obj, ic\speed

    Next ic

    DrawScreen
Forever

Re: Tyhmät kysymykset

Posted: Mon Apr 06, 2009 7:32 am
by matti3 täsä
matti3 wrote:Tämä kävisi varmaan nopeammin kloonaamalla, mutta päätin nyt ensin koittaa niin, että autot ovat kaikki oma objectinsa. (20 tällä hetkellä)

Niin koitin tälläistä koodia:

Code: Select all



If ObjectX(auto)<30+oma_ukko Or ObjectY(auto)<20+oma_ukko Then
if KeyHit(cbkeyreturn) Then
DeleteObject oma_ukko
EndIf
EndIf
Tarkoitus olisi, että jos oma_ukko on lähellä autoa ja painaa entteriä niin se oma ukko menee autoon sisälle. Mutta se ei jonkin syyn takia mene. Ja jos joku on ystävällinen kertoisi miten saan kloonaamalla noin 50 autoa pyörimään pitkin kaupunkia. Ja samallaisella jutulla, että jos jotain näistä autoista menee lähelle ja painaa entter niin auto ryöstetään. <-- kyseessä ei muuten ole GTA klooni vaan osa pelin ominaisuuksista. :o
Osaako kukaan auttaa? :o

Re: Tyhmät kysymykset

Posted: Mon Apr 06, 2009 7:40 am
by MAVmaggot
Kokeileppa tolla.

Code: Select all

If Distance2(auto,oma_ukko)<30 Then
  If KeyHit(cbkeyreturn) Then
    DeleteObject oma_ukko
  EndIf
EndIf
Kloonaukseen tarvitset tyyppejä, opettele käyttämään niitä.

Re: Tyhmät kysymykset

Posted: Mon Apr 06, 2009 2:50 pm
by skorpioni-cb
Kuinka monta kenttää pitää olla hyvässä pelissä? En kato tiedä :?:
EDIT:

Huhuu.

EDIT:

Minä haluan julkaista pelinini muualla kuin foorumeilla.


Re: Tyhmät kysymykset

Posted: Mon Apr 06, 2009 3:07 pm
by Sami The Great
skorpioni-cb wrote:Kuinka monta kenttää pitää olla hyvässä pelissä? En kato tiedä :?:
Jaa, kun hyvä peli voi olla, joko RPG, jossa on vain yksi kenttä tai sitten tasohypely, jossa on 40 kenttää. Ei se pelin hyvyys kenttien määrän perusteella määräydy.

Re: Tyhmät kysymykset

Posted: Mon Apr 06, 2009 8:25 pm
by shimo
KillBurn wrote:
shimo wrote:
MAVmaggot wrote:Läpikäy kaikki tilet, etsi datakerroksien haluttu tile ja luo. Koodina se näyttää jotenkin tällaiselta;

Code: Select all

For y=1 To MapWidth()
For x=1 To MapWidth()
    If GetMap2(3,x,y)=haluttudata Then
        vihu.VIHUT = New(VIHUT)
        ObjectToMap(vihu\obj,x,y) //PositionObject...
    EndIf
Next x
Next y
vihut spawnaa keskelle karttaa, onko pakko kayttää ObjectToMap;ia?
Ei. Se on funktion kutsu, voit tehdä tuollaisen funktion, joka luo vihollisen. Mutta jos et osaa niin näinkin pitäisi onnistua.

Code: Select all

For y=1 To MapWidth()
For x=1 To MapWidth()
    If GetMap2(3,x,y)=haluttudata Then
        vihu.VIHUT = New(VIHUT)
        newvihu\obj=cloneobject(Objektin nimi)
        PositionObject newvihu\obj,x*32-(ObjectSizeX(map)/2),-y*32+(ObjectSizeY(map)/2)'Asetetaan vihu kartalle. tilekoko on 32 pikseliä
    EndIf
Next x
Next y
Tuo kannattaa laittaa ennen pääsilmukkaa. Tile kartan koon on oltava 32 pikseliä
eivät mene vieläkään kohdilleen...kaikki menevät vasempaan yläkulmaan...

Code: Select all

    If uus=0 Then
        v.VIHU = New (VIHU)
        v\obj = CloneObject (mvihu)

For mapY=1 To MapWidth()
For mapX=1 To MapWidth()
    If GetMap2(3,mapx,mapy)=1 Then
        PositionObject v\obj,x*32-(ObjectSizeX(kartta)/2),-y*32+(ObjectSizeY(kartta)/2)//mitä kettua...?!?
    EndIf
Next mapX
Next mapY

Re: Tyhmät kysymykset

Posted: Mon Apr 06, 2009 8:29 pm
by Jani
Ethän ole edes ladannut karttaa!
Katso funktio LoadMap().

Re: Tyhmät kysymykset

Posted: Mon Apr 06, 2009 9:44 pm
by KillBurn
Jani ei tuossa koko koodia ole. Shimo jos laittaisit sen koko koodin, niin ongelma ratkeaisi helpommin.

Re: Tyhmät kysymykset

Posted: Mon Apr 06, 2009 10:40 pm
by Character
Toimisiko tämä? En ole kokeillut mutta..

Code: Select all

If uus=0 Then
v.VIHU = New (VIHU)
v\obj = CloneObject (mvihu)
For mapX = -MapWidth()/2 To MapWidth()/2
	For mapY = -MapHeight()/2 to MapHeight()/2
		If GetMap2(3, mapX, mapY) = 1 Then
			PositionObject v\obj, mapX * 32, mapY * 32
		EndIf
	Next mapY
Next mapX

Re: Tyhmät kysymykset

Posted: Wed Apr 08, 2009 8:50 am
by shimo
KillBurn wrote:Jani ei tuossa koko koodia ole. Shimo jos laittaisit sen koko koodin, niin ongelma ratkeaisi helpommin.
Se koodi kun on kokonaisuudessaan 1200-1400 riviä+includet, joten pakkohan sitä on rajata.

Code: Select all

//kenttien lataus...(tilemap-valinta tehdään aikaisemmin..)
If tilemap = 1 Then 
   kartta = LoadMap("data\Map0.til","data\tileset.bmp")
    ukkox=0
    ukkoy=540
  EndIf

If tilemap = 2 Then 
kartta = LoadMap("data\2way_pipe.til","data\tileset.bmp")
    ukkox=0
    ukkoy=0
  EndIf
  
If tilemap = 3 Then 
kartta = LoadMap("data\Cross.til","data\tileset.bmp")
    ukkox=0
    ukkoy=0
  EndIf
Character wrote:Toimisiko tämä? En ole kokeillut mutta..

Code: Select all

If uus=0 Then
v.VIHU = New (VIHU)
v\obj = CloneObject (mvihu)
For mapX = -MapWidth()/2 To MapWidth()/2
	For mapY = -MapHeight()/2 to MapHeight()/2
		If GetMap2(3, mapX, mapY) = 1 Then
			PositionObject v\obj, mapX * 32, mapY * 32
		EndIf
	Next mapY
Next mapX
tämä laittoi vihut vain toiseen paikkaan kuin edellinen...-.-'

Re: Tyhmät kysymykset

Posted: Wed Apr 08, 2009 10:23 am
by KillBurn

Code: Select all

SCREEN 800,600
FrameLimit 40
Type vihu
Field obj
EndType 
ukko=LoadObject("media\soldier.bmp")
map=LoadMap("media\map.til","media\tileset.bmp")
ShowObject ukko,OFF

newvihu.vihu= New(vihu)
newvihu\obj=CloneObject(ukko)

For x=1 To MapWidth()
For y=1 To MapWidth()
    If GetMap2(3,x,y)=1 Then PositionObject newvihu\obj,x*32-(ObjectSizeX(map)/2),-y*32+(ObjectSizeY(map)/2)
Next y
Next x

Repeat

TranslateCamera (RightKey() - LeftKey()) * 3, (UpKey() - DownKey()) * 3

DrawScreen

Forever 
Noin. Vihollinen pistetään datanumero ykköseen.
200 viesti ;)

Re: Tyhmät kysymykset

Posted: Sat Apr 11, 2009 9:10 pm
by GGMadMan
Hommasin tänään Coolbasicin. Learn senterin 7 "tehtävässä" Tuli ongelma. Käskettiin laittaa liikkumanäppäimet kuvalle ja tein niin ja mielestäni ne on oikein, mutta pukkaa "Memory access violation" erroria, kun painaa jotain nuolinäppäintä. Kertokaa pian mikä väärin :|

Code: Select all


Koodi:
FrameLimit 40

SCREEN 640,480

kuva = LoadImage (" Sensuuri :D ")

Repeat

If LeftKey() Then TurnObject kuva, 5
    If RightKey() Then TurnObject kuva, -5    
    
    If UpKey() Then MoveObject kuva, 2
    If DownKey() Then MoveObject kuva, -2
    
    DrawImage kuva,40,20
    
    DrawScreen

Forever

Re: Tyhmät kysymykset

Posted: Sat Apr 11, 2009 9:12 pm
by Viltzu
TurnObject on nimenomaan tarkoitettu objekteille, samoin kuin MoveObject. Joten ajattele siitä mikä meni vikaan. Katsele eri komentoja manuaalista.
EDIT:

Ja tehtävässä kai käsketään liikuttaa sitä kuvaa niin, että se ei käänny. Vinkkiä: X, Y, DrawImage


Re: Tyhmät kysymykset

Posted: Sat Apr 11, 2009 9:14 pm
by phons
Latasit kuvan "kuva", ja pyörität objektia "kuva". Ei toimi koska kuva "kuva" on kuva eikä objekti. Kts funktio LoadObject tai RoateImage.
P.S. RotateImage on aika huono...

Re: Tyhmät kysymykset

Posted: Sat Apr 11, 2009 9:58 pm
by GGMadMan
No kiitti neuvoista kummiskin. Opiskelu jatkuu :lol: -->

Re: Tyhmät kysymykset

Posted: Sun Apr 12, 2009 1:12 pm
by rami123
Miten saan samall typellä tehdyille objecteille törmäyksen keskenään?

Esim : setupcollision iSotilas1\obj,iSotilas1\obj,2,2,2
EDIT:

Kiitos!


Re: Tyhmät kysymykset

Posted: Sun Apr 12, 2009 1:21 pm
by phons

Re: Tyhmät kysymykset

Posted: Sun Apr 12, 2009 10:44 pm
by Eur0-5isu
Miten toteuttaa nuolen fysiikat? Olen kyllä ihan pusikossa tämän kanssa, kun pitäisi tavalliselle nuolelle toteuttaa lentorata ja sen pitäisi vielä kääntyä oikeassa kulmassa. Nuolet on tehty ihan tavallisilla tyyppiobjekteilla. Haluaisiko joku heittää jotain vinkkiä miten kannattaisi asiaa lähteä totuttamaan?


EDIT: Kiitoksia

Re: Tyhmät kysymykset

Posted: Sun Apr 12, 2009 10:56 pm
by phons

Re: Tyhmät kysymykset

Posted: Mon Apr 13, 2009 11:07 am
by rami123
Tipahtaako fps jos setupcollision on silmukassa?
EDIT:

kiitos! epäilinkin jo sitä..