Re: Tyhmät kysymykset (I/2012)
Posted: Sat Apr 27, 2013 3:44 pm
Se kartta varmaan kannattaisi ennemmin järjestää alimmaksi, jos vaikka joskus haluaa muitakin objekteja kuin pelkän ukon.legend wrote:Code: Select all
ObjectOrder ukko, 1
Game Making Should Be Easy...
https://www.coolbasic.com/phpBB3/
Se kartta varmaan kannattaisi ennemmin järjestää alimmaksi, jos vaikka joskus haluaa muitakin objekteja kuin pelkän ukon.legend wrote:Code: Select all
ObjectOrder ukko, 1
MouseWX(), MouseWY() ja nämä: www.cbrepository.com/codes/code/69/Ize wrote:Onko mitään keinoa saada hiiren sijainti tileinä? Ei ole sisäisiä komentoja, mutta joku funkkari mahdollisesti?
Code: Select all
FrameLimit 40
SCREEN 640,480,0,cbfullscreen
kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1
ukko = LoadObject ("Media\guy.bmp",72)
SetupCollision ukko, kartta, 1, 4, 2
tausta=LoadImage("Media\chatruutu.bmp")
gamma=-255
ScreenGamma gamma,gamma,gamma
MaskImage tausta, 255,255,255
While gamma<=0
DrawImage tausta,0,320
Text 30,350,"Jotain höopinää"
text 30,370,"Ja lisää"
Text 480,450,"..."
ScreenGamma gamma,gamma,gamma
gamma=gamma+1.5
UpdateGame
DrawScreen
Wend
Code: Select all
FrameLimit 40
SCREEN 640,480,0,cbfullscreen
kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1
ukko = LoadObject ("Media\guy.bmp",72)
SetupCollision ukko, kartta, 1, 4, 2
tausta=LoadImage("Media\chatruutu.bmp")
gamma=-255
ScreenGamma gamma,gamma,gamma
MaskImage tausta, 255,255,255
While gamma<=0
DrawGame
DrawImage tausta,0,320
Text 30,350,"Jotain höopinää"
text 30,370,"Ja lisää"
Text 480,450,"..."
ScreenGamma gamma,gamma,gamma
gamma=gamma+1.5
DrawScreen
Wend
Code: Select all
FrameLimit 40
kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1
ukko = LoadObject ("Media\guy.bmp",4)
SetupCollision ukko, kartta, 1, 4, 2
Repeat
If LeftKey() Then
If ObjectAngle(ukko) = 180 Then
MoveObject ukko,32
liiku=Timer()
Repeat
Until TIMER()>liiku+200
ClearKeys
Else
RotateObject ukko,180
liiku=Timer()
Repeat
Until TIMER()>liiku+200
ClearKeys
EndIf
EndIf
If RightKey() Then
If ObjectAngle(ukko) = 0 Then
MoveObject ukko,32
liiku=Timer()
Repeat
Until TIMER()>liiku+200
ClearKeys
Else
RotateObject ukko,0
liiku=Timer()
Repeat
Until TIMER()>liiku+200
ClearKeys
EndIf
EndIf
If UpKey() Then
If ObjectAngle(ukko) = 90 Then
MoveObject ukko,32
liiku=Timer()
Repeat
Until TIMER()>liiku+200
ClearKeys
Else
RotateObject ukko,90
liiku=Timer()
Repeat
Until TIMER()>liiku+200
ClearKeys
EndIf
EndIf
If DownKey() Then
If ObjectAngle(ukko) = 270 Then
MoveObject ukko,32
liiku=Timer()
Repeat
Until TIMER()>liiku+200
ClearKeys
Else
RotateObject ukko,270
liiku=Timer()
Repeat
Until TIMER()>liiku+200
ClearKeys
EndIf
EndIf
UpdateGame
CloneCameraPosition ukko
DrawScreen
Forever
Ukon siirtämisen perään GetMapilla tarkistat, onko ukon koordinaattien alla olevassa törmäyskerroksessa muu kuin 0, ja jos on niin ukon ei kuuluisi olla siinä (eli sitten se siirretään takaisin). Tai vaihtoehtoisesti voi tarkistaa, onko ukon leveyden verran ukon vieressä olevissa koordinaateissa törmäyskerroksessa 0 ja liikutaan jos ja vain jos se on 0.Ryitt wrote:Lisää kysymyksiä mutta ei niitä toivottavasti liikaa ole.
Kun tuo setupcollision törmäys näyttää toimivan vain objectin reunoihin niin miten voin tarkistaa onko esimerkiksi ukko törmättävän seinän sisällä ja täten estää liikkumisen jos ukko kerta liikkuu tilen kerrallaan niin että se pomppaa suoraan sisään.
Vaikeasti selitetty mutta esimerkki... ->Code: Select all
FrameLimit 40 kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp") PlayObject kartta,0,0,1 ukko = LoadObject ("Media\guy.bmp",4) SetupCollision ukko, kartta, 1, 4, 2 Repeat If LeftKey() Then If ObjectAngle(ukko) = 180 Then MoveObject ukko,32 liiku=Timer() Repeat Until TIMER()>liiku+200 ClearKeys Else RotateObject ukko,180 liiku=Timer() Repeat Until TIMER()>liiku+200 ClearKeys EndIf EndIf If RightKey() Then If ObjectAngle(ukko) = 0 Then MoveObject ukko,32 liiku=Timer() Repeat Until TIMER()>liiku+200 ClearKeys Else RotateObject ukko,0 liiku=Timer() Repeat Until TIMER()>liiku+200 ClearKeys EndIf EndIf If UpKey() Then If ObjectAngle(ukko) = 90 Then MoveObject ukko,32 liiku=Timer() Repeat Until TIMER()>liiku+200 ClearKeys Else RotateObject ukko,90 liiku=Timer() Repeat Until TIMER()>liiku+200 ClearKeys EndIf EndIf If DownKey() Then If ObjectAngle(ukko) = 270 Then MoveObject ukko,32 liiku=Timer() Repeat Until TIMER()>liiku+200 ClearKeys Else RotateObject ukko,270 liiku=Timer() Repeat Until TIMER()>liiku+200 ClearKeys EndIf EndIf UpdateGame CloneCameraPosition ukko DrawScreen Forever
Varmaankin käytät MaskObjectia? MaskObjectissa on sellainen ominaisuus/bugi, että se ei toimi objekteilla joita pyöritellään.Ize wrote:Olisi pieni ongelma. Jälleen.
Elikkäs olen wörkännyt objektin, joka hyppii ja pyörähtää samalla. Ongelma on se että kun objekti pyörii/on jossain muussa kulmassa, kuin alkuperäisessä, objektin ympärille ilmestyy "musta laatikko", joka katoaa kun objekti palaa alkuperäiseen asentoon. Olen törmännyt tähän monia kertoja, mutta vasta nyt se on todella haitaksi.
Juu. Nyt toimiiLatexi95 wrote: Varmaankin käytät MaskObjectia? MaskObjectissa on sellainen ominaisuus/bugi, että se ei toimi objekteilla joita pyöritellään.
Ongelman voi kiertää käyttämällä maskivärinä mustaa, niin kuin oletuksena on, jolloin ei tarvitse kutsua MaskObjectia. Jos kuvassasi tarvitaan mustaa väriä voit muuttaa sen esimerkiksi 1,0,0 väriksi, jolloin se näyttää samalta mutta ei kuitenkaan maskaudu pois.
Code: Select all
Function UpdateDrawNums()
For pwn.PAWN = Each PAWN
If pwn\PosY = PlayerPosY-(TileSize*5) Then
pwn\DrawNum = 1
ElseIf pwn\PosY = PlayerPosY-(TileSize*4) Then
pwn\DrawNum = 2
ElseIf pwn\PosY = PlayerPosY-(TileSize*3) Then
pwn\DrawNum = 3
ElseIf pwn\PosY = PlayerPosY-(TileSize*2) Then
pwn\DrawNum = 4
ElseIf pwn\PosY = PlayerPosY-(TileSize*1) Then
pwn\DrawNum = 5
ElseIf pwn\PosY = PlayerPosY Then
pwn\DrawNum = 6
ElseIf pwn\PosY = PlayerPosY+(TileSize*1) Then
pwn\DrawNum = 7
ElseIf pwn\PosY = PlayerPosY+(TileSize*2) Then
pwn\DrawNum = 8
ElseIf pwn\PosY = PlayerPosY+(TileSize*3) Then
pwn\DrawNum = 9
ElseIf pwn\PosY = PlayerPosY+(TileSize*4) Then
pwn\DrawNum = 10
ElseIf pwn\PosY = PlayerPosY+(TileSize*5) Then
pwn\DrawNum = 11
Else
pwn\DrawNum = 0
EndIf
Next pwn
EndFunction
Code: Select all
Function UpdateDrawNums()
CurDrawNum = 1
Tiles = 5
For i = -Tiles To Tiles
For pwn.PAWN = Each PAWN
If pwn\PosY = PlayerPosY+(TileSize*i)
pwn\DrawNum = CurDrawNum
Else
pwn\DrawNum = 0
EndIf
Next pwn
CurDrawNum+1
Next i
EndFunction
Auttaisi, jos selittäisit mitä koodin kuuluu tehdä. Jos tarkoitus on tehdä shakkilautatyyppinen peli, jossa pelaaja liikkuu ruudulla, niin tuota voisi lähteä toteuttaman paremminkin.Paroni wrote:Taas pieni tyhmä kysymys. Tuntuu hyvin onnettomalta ku en saa millään seuraavaa koodia muutettua toimimaan For -looppina:Olen nyt ties mitä kokeillut mutta aina on sama tulos: Yksi rivi hahmoja näkyy kerrallaan ja pelaaja ei näy ollenkaanCode: Select all
Function UpdateDrawNums() For pwn.PAWN = Each PAWN If pwn\PosY = PlayerPosY-(TileSize*5) Then pwn\DrawNum = 1 ElseIf pwn\PosY = PlayerPosY-(TileSize*4) Then pwn\DrawNum = 2 ElseIf pwn\PosY = PlayerPosY-(TileSize*3) Then pwn\DrawNum = 3 ElseIf pwn\PosY = PlayerPosY-(TileSize*2) Then pwn\DrawNum = 4 ElseIf pwn\PosY = PlayerPosY-(TileSize*1) Then pwn\DrawNum = 5 ElseIf pwn\PosY = PlayerPosY Then pwn\DrawNum = 6 ElseIf pwn\PosY = PlayerPosY+(TileSize*1) Then pwn\DrawNum = 7 ElseIf pwn\PosY = PlayerPosY+(TileSize*2) Then pwn\DrawNum = 8 ElseIf pwn\PosY = PlayerPosY+(TileSize*3) Then pwn\DrawNum = 9 ElseIf pwn\PosY = PlayerPosY+(TileSize*4) Then pwn\DrawNum = 10 ElseIf pwn\PosY = PlayerPosY+(TileSize*5) Then pwn\DrawNum = 11 Else pwn\DrawNum = 0 EndIf Next pwn EndFunction
Code: Select all
Function UpdateDrawNums() CurDrawNum = 1 Tiles = 5 For i = -Tiles To Tiles For pwn.PAWN = Each PAWN If pwn\PosY = PlayerPosY+(TileSize*i) pwn\DrawNum = CurDrawNum Else pwn\DrawNum = 0 EndIf Next pwn CurDrawNum+1 Next i EndFunction
Code: Select all
Function DrawPawns()
For i = 1 To Tiles // edit: Tilesin sijaan oikeassa koodissa on vain "11"
For pwn.PAWN = Each PAWN
If pwn\DrawNum = i Then
DrawImage pwn\Img, pwn\PosX, pwn\PosY-(ImageHeight(pwn\Img)/2), pwn\Facing-1
EndIf
Next pwn
Next i
EndFunction
Hah!
Keksinkin yöunien jälkeen mistä kenkä puristaa. Else ...drawnum 0 tosiaan nollaa jokaisen hahmon drawnumin joten kukaan ei piirry
Toimiva koodi jos jotakuta mahtaa kiinnostaa/keksii parannettavaa:
Code: Select all
Function UpdateDrawNums()
Tiles = 5
CurDrawNum = 1
For pwn.PAWN = Each PAWN
pwn\DrawNum = 0
For i = -Tiles To Tiles
If pwn\PosY = PlayerPosY+(TileSize*i) Then
pwn\DrawNum = CurDrawNum
EndIf
If i = Tiles Then
CurDrawNum = 1
Else
CurDrawNum+1
EndIf
Next i
Next pwn
EndFunction
Joka kerta ennen pelin ajamista painat Ctrl+Alt+Del, ja sammutat cbRun.exe prosesseista jos se on käynnissä._GRAAFIKKO_ wrote:minulla on sellainen ongelma, että kun avaan coolbasicin tietokoneen yhteydessä, coolbasic aukeaa, mutta kun yritän suorittaa jonkun tekemäni pelin niin kone väittää että ohjelma on jo käynnissä.
täten, joudun aina lataamaan coolbasicin uudestaan, jotta voin "koeajaa" pelini ??? missä piilee vika?
Mikäli talo on myös objekti (ei osa tilekarttaa), niin silloin homma hoituu helposti ObjectsOverlap-funktiolla.temetin123 wrote:Hei!
Kysyisin että miten saa tekstin tulemaan silloin kun koskee jotain toista objektia?
Esim. Jos on ukko ja talo ja kun ukko koskee taloa pitäisi saada näkyviiin teksti "talo on lukossa".
Code: Select all
If ObjectsOverlap(ukko, talo, [tapa]) // Jos objekti 'ukko' on objektin 'talo' päällä, niin...
Text 0,0,"talo on lukossa" //...tulostetaan vasempaan ylänurkkaan (0,0) teksti "talo on lukossa"
Endif
Code: Select all
// Oletuksena talon/oven kohdalle on asetettu arvoksi 1
If Getmap(3,ObjectX(ukko), ObjectY(ukko)) = 1 // Jos kartan 3. kerroksessa (datakerros) on ukon sijainnin kohdalla tilellä arvo 1, niin...
Text 0,0,"talo on lukossa" //...tulostetaan vasempaan ylänurkkaan (0,0) teksti "talo on lukossa"
Endif