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.
Osaako kukaan auttaa?
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: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
Turn
Object 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
-->
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
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ä..