Page 8 of 23
Re: Tyhmät kysymykset (I/2011)
Posted: Thu Mar 15, 2012 9:40 am
by skorpioni-cb
Latexi95 wrote:Konstaduck wrote:Olen tässä taas mietiskellyt syvällisiä, ja yksi, mikä jäi kiusaamaan on animaatio avatarissa.
Kokeilin haulla etsiä, mutta löytyi vaan sen avatarin muilta sivuilta lataamis estojuttui jne jne.
Eli miten saisin animaation avatariini? Meneekö se samalla tavalla, kuin tuo CB:n animaatiokuva?
vastauksia odotellen, Konstaduck
Laitoin kyllä tämän vastauksen jo offtopiciin, mutta ilmeisesti se meni sinulta ohi.
Sinun pitää tehdä gif-kuva, siihen saat laitettua animaation. Sitten vaan laitat sen samanlailla avatariksesi kuin tavallisenkin kuvan.
Minuakin ihmetyttää se, miten GIF-formaattiin voi tehdä animaatioita, ja voiko niitä tehdä sinun Animaattori v.3 ?
Re: Tyhmät kysymykset (I/2011)
Posted: Thu Mar 15, 2012 9:44 am
by axu
Konstaduck wrote:Olen tässä taas mietiskellyt syvällisiä, ja yksi, mikä jäi kiusaamaan on animaatio avatarissa.
Kokeilin haulla etsiä, mutta löytyi vaan sen avatarin muilta sivuilta lataamis estojuttui jne jne.
Eli miten saisin animaation avatariini? Meneekö se samalla tavalla, kuin tuo CB:n animaatiokuva?
vastauksia odotellen, Konstaduck
Ja jos ihmettelet, miten GIF-kuvia tehdään, siihen löytyy ilmaisia ohjelmia. En voi olla mainostamatta omaa ratkaisuani:
GIF-kuvan tallennin
Oma avatarini on koodaamalla animoitu ja tallennettu tuolla funktiolla.
Re: Tyhmät kysymykset (I/2011)
Posted: Thu Mar 15, 2012 9:54 am
by Latexi95
skorpioni-cb wrote:...ja voiko niitä tehdä sinun Animaattori v.3 ?
Valitettavasti ei.
Pitäisi jossain vaiheessa sitäkin taas jatkaa (tai aloittaa koodaaminen alusta), mutta nyt kyllä cbEnchanted menee edelle (Typet voisi ehkä saada toimimaan tänään).
Re: Tyhmät kysymykset (I/2011)
Posted: Thu Mar 15, 2012 1:38 pm
by Akuji
Miksi tässä koodissa toimii vain toinen kohdista 1 ja 2. Eli jos esimerkiksi otan kohdan yksi pois, toimii kohta 2 ja toisinpäin, mutta yhdessä ne eivät toimi. Tämän siis pitäisi toimia niin, että kun liikutat hiirtä joko oikealle tai vasemmalle, ohjelma sammuu.
Code: Select all
#1
If MouseMoveX()=1 Then
End
EndIf
#2
If MouseMoveX()=-1 Then
End
EndIf
Re: Tyhmät kysymykset (I/2011)
Posted: Thu Mar 15, 2012 2:25 pm
by Latexi95
Akuji wrote:Miksi tässä koodissa toimii vain toinen kohdista 1 ja 2. Eli jos esimerkiksi otan kohdan yksi pois, toimii kohta 2 ja toisinpäin, mutta yhdessä ne eivät toimi. Tämän siis pitäisi toimia niin, että kun liikutat hiirtä joko oikealle tai vasemmalle, ohjelma sammuu.
Code: Select all
#1
If MouseMoveX()=1 Then
End
EndIf
#2
If MouseMoveX()=-1 Then
End
EndIf
Se johtuu siitä, että MouseMove* vertaa liikettä edelliseen saman funktion kutsuun taikka DrawScreeniin. Eli MouseMoveX kannattaa yleensä laittaa muuttujaan silmukan alussa. (Ja sitten varmaan kannattaa vaihtaa yhtäsuuruusmerkit suurempi-kuin- ja pienempi-kuin -merkkeihin.
Code: Select all
mx = MouseMoveX()
#1
If mx>0 Then
End
EndIf
#2
If mx<0 Then
End
EndIf
[/quote]
Re: Tyhmät kysymykset (I/2011)
Posted: Thu Mar 15, 2012 5:32 pm
by axu
Latexi95 wrote:Se johtuu siitä, että MouseMove* vertaa liikettä edelliseen saman funktion kutsuun taikka DrawScreeniin. Eli MouseMoveX kannattaa yleensä laittaa muuttujaan silmukan alussa. (Ja sitten varmaan kannattaa vaihtaa yhtäsuuruusmerkit suurempi-kuin- ja pienempi-kuin -merkkeihin.
Muistaakseni MouseMove-komennot vertailevat pelkästään edelliseen kutsumiskertaan eikä DrawScreeniin. Jos jollakin kierroksella ei tarvitse tietää MouseMoven arvoa, kannattaa sitä kutsua, ettei seuraavalla kutsumiskerralla rekisteröidä tarpeettoman suurta liikettä (kirjoita vaikka tmp = MouseMoveX() + MouseMoveY()).
Re: Tyhmät kysymykset (I/2011)
Posted: Thu Mar 15, 2012 5:39 pm
by Latexi95
axu wrote:
Muistaakseni MouseMove-komennot vertailevat pelkästään edelliseen kutsumiskertaan eikä DrawScreeniin. Jos jollakin kierroksella ei tarvitse tietää MouseMoven arvoa, kannattaa sitä kutsua, ettei seuraavalla kutsumiskerralla rekisteröidä tarpeettoman suurta liikettä (kirjoita vaikka tmp = MouseMoveX() + MouseMoveY()).
Totta. No niinhän tuo meneekin.
Ammusta tuhotessa MAV
Posted: Thu Mar 22, 2012 6:43 pm
by VerkkoGuru
Olen tekemässä peliä, jossa vihollinen jahtaa pelaaja, ja pelaaja puolustautuu aseella. Ongelmaksi kuitenkin tuli, että kun kuvittelin viimein saavani pelin perusidean toimimaan, niin peli alkoi MAVittamaan luotien poistovaiheessa?
Koodi tässä:
Code: Select all
Type LUODIT
Field obj
EndType
FrameLimit 60
health%=100
pisteet%=0
VihunHealth%=100
ukko=LoadObject("Media/guy.bmp",360)
pati=LoadObject("Media/bullet.bmp")
vihollinen=LoadObject("media/soldier.bmp",180)
ShowObject pati, OFF
PositionObject vihollinen,ObjectX(ukko)+100,ObjectY(ukko)+100
ObjectInteger ukko,health
ObjectInteger vihollinen,VihunHealth
Repeat
PointObject vihollinen,ukko
If ObjectsOverlap(vihollinen,ukko,3) Then health=health-1
MoveObject vihollinen,+1
If LeftKey() Then TurnObject ukko,-1
If RightKey() Then TurnObject ukko,+1
If DownKey() Then MoveObject ukko,Float(-1.25)
If UpKey() Then MoveObject ukko,Float(+1.5)
If KeyDown(cbkeyA) Then MoveObject ukko,0,-1
If KeyDown(cbkeyD) Then MoveObject ukko,0,+1
If KeyDown(57) And reload=0 Then
ammus.LUODIT = New(LUODIT)
ammus\obj=CloneObject(pati)
CloneObjectOrientation ammus\obj,ukko
CloneObjectPosition ammus\obj,ukko
reload=4
EndIf
For ammus.LUODIT = Each LUODIT
MoveObject ammus\obj,+1
If Distance2(ammus\obj,ukko)>200 Then
DeleteObject ammus\obj
Delete ammus.LUODIT
EndIf
If ObjectsOverlap(ammus\obj,vihollinen) Then
VihunHealth=-1
DeleteObject ammus\obj
Delete ammus.LUODIT
EndIf
Next ammus.LUODIT
If reload>0 Then reload=reload-1
If VihunHealth=0 Then
pisteet=pisteet+100
PositionObject vihollinen,Rand(0,400),Rand(0,600)
EndIf
If health=0 Then
pisteet=pisteet-20
health=100
PositionObject ukko,0,0
EndIf
Text 0,0,"Pelaajan elämät:"+health
Text 0,16,"Vihollisen elämät:"+VihunHealth
Text 0,32,"Pisteet:"+pisteet
Box 160,0,health,16,1
Box 160,17,VihunHealth,16,1
DrawScreen
Until EscapeKey()
Re: Ammusta tuhotessa MAV
Posted: Thu Mar 22, 2012 7:03 pm
by Latexi95
VerkkoGuru wrote:Olen tekemässä peliä, jossa vihollinen jahtaa pelaaja, ja pelaaja puolustautuu aseella. Ongelmaksi kuitenkin tuli, että kun kuvittelin viimein saavani pelin perusidean toimimaan, niin peli alkoi MAVittamaan luotien poistovaiheessa?
Koodi tässä:
Code: Select all
Type LUODIT
Field obj
EndType
FrameLimit 60
health%=100
pisteet%=0
VihunHealth%=100
ukko=LoadObject("Media/guy.bmp",360)
pati=LoadObject("Media/bullet.bmp")
vihollinen=LoadObject("media/soldier.bmp",180)
ShowObject pati, OFF
PositionObject vihollinen,ObjectX(ukko)+100,ObjectY(ukko)+100
ObjectInteger ukko,health
ObjectInteger vihollinen,VihunHealth
Repeat
PointObject vihollinen,ukko
If ObjectsOverlap(vihollinen,ukko,3) Then health=health-1
MoveObject vihollinen,+1
If LeftKey() Then TurnObject ukko,-1
If RightKey() Then TurnObject ukko,+1
If DownKey() Then MoveObject ukko,Float(-1.25)
If UpKey() Then MoveObject ukko,Float(+1.5)
If KeyDown(cbkeyA) Then MoveObject ukko,0,-1
If KeyDown(cbkeyD) Then MoveObject ukko,0,+1
If KeyDown(57) And reload=0 Then
ammus.LUODIT = New(LUODIT)
ammus\obj=CloneObject(pati)
CloneObjectOrientation ammus\obj,ukko
CloneObjectPosition ammus\obj,ukko
reload=4
EndIf
For ammus.LUODIT = Each LUODIT
MoveObject ammus\obj,+1
If Distance2(ammus\obj,ukko)>200 Then
DeleteObject ammus\obj
Delete ammus.LUODIT
EndIf
If ObjectsOverlap(ammus\obj,vihollinen) Then
VihunHealth=-1
DeleteObject ammus\obj
Delete ammus.LUODIT
EndIf
Next ammus.LUODIT
If reload>0 Then reload=reload-1
If VihunHealth=0 Then
pisteet=pisteet+100
PositionObject vihollinen,Rand(0,400),Rand(0,600)
EndIf
If health=0 Then
pisteet=pisteet-20
health=100
PositionObject ukko,0,0
EndIf
Text 0,0,"Pelaajan elämät:"+health
Text 0,16,"Vihollisen elämät:"+VihunHealth
Text 0,32,"Pisteet:"+pisteet
Box 160,0,health,16,1
Box 160,17,VihunHealth,16,1
DrawScreen
Until EscapeKey()
Kun poistat luodin, kun se menee liian kauas, niin tarkistat sen jälkeen onko luoti vihollisen päällä. Siinä tuolee MAV. Laita ElseIf, niin että et tarkista törmäyksiä vihollisten kanssa, kun olet jo poistanut luodin.
Re: Tyhmät kysymykset (I/2011)
Posted: Tue Mar 27, 2012 6:19 pm
by skorpioni-cb
Minä en tiedä onko tämä kysymys oikeastaan tyhmä, mutta tämä liittyy cbNetworkkiin:
olen tekemässä peliä nimeltään Pong Reloaded, nimestä voi jo päätellä minkälainen nimi on kyseessä, mutta kun mä oon tehnyt infotavut ylös ja alas liikkumiseen, niin herää kysymys, mistä tiedän kumpi/mikä(koska yritän tehdä semmoista tournment-tyylistä PONG-moninpeliä) clientti sen lähetti, olen tehnyt tyypin pelaajalle, joka sisältää ainakin usernamen, ID:n, pisteet, koordinaatit ja vastustajan ID:n
Re: Tyhmät kysymykset (I/2011)
Posted: Tue Mar 27, 2012 6:34 pm
by valscion
skorpioni-cb wrote:Minä en tiedä onko tämä kysymys oikeastaan tyhmä, mutta tämä liittyy cbNetworkkiin:
olen tekemässä peliä nimeltään Pong Reloaded, nimestä voi jo päätellä minkälainen nimi on kyseessä, mutta kun mä oon tehnyt infotavut ylös ja alas liikkumiseen, niin herää kysymys, mistä tiedän kumpi/mikä(koska yritän tehdä semmoista tournment-tyylistä PONG-moninpeliä) clientti sen lähetti, olen tehnyt tyypin pelaajalle, joka sisältää ainakin usernamen, ID:n, pisteet, koordinaatit ja vastustajan ID:n
Palvelimen puolella voit katsoa clientin ID:n muuttujasta
NET_ClientId$ ServerRead() funktion kutsun jälkeen ja sitten verrata sitä tyyppisi jäseniin. Näin saat tietoosi sen, että keneltä sitä dataa tulee.
Re: Tyhmät kysymykset (I/2011)
Posted: Tue Mar 27, 2012 7:19 pm
by skorpioni-cb
VesQ wrote:skorpioni-cb wrote:Minä en tiedä onko tämä kysymys oikeastaan tyhmä, mutta tämä liittyy cbNetworkkiin:
olen tekemässä peliä nimeltään Pong Reloaded, nimestä voi jo päätellä minkälainen nimi on kyseessä, mutta kun mä oon tehnyt infotavut ylös ja alas liikkumiseen, niin herää kysymys, mistä tiedän kumpi/mikä(koska yritän tehdä semmoista tournment-tyylistä PONG-moninpeliä) clientti sen lähetti, olen tehnyt tyypin pelaajalle, joka sisältää ainakin usernamen, ID:n, pisteet, koordinaatit ja vastustajan ID:n
Palvelimen puolella voit katsoa clientin ID:n muuttujasta
NET_ClientId$ ServerRead() funktion kutsun jälkeen ja sitten verrata sitä tyyppisi jäseniin. Näin saat tietoosi sen, että keneltä sitä dataa tulee.
Kiitti, täytynee kattoo kunhan pääsen niin pitkälle koodauksessa, mutta nyt kun olen saanut clientin yhdistämään servuun, niin tulee ongelma, nimittäin kun yhden kerran yksi client yhdistää mun servuun, niin servun "konsoli-ikkunaan" tulee floodina viestejä, että uusi client on yhdistänyt, ja silleen, tässä clientin ja serverin koodit tähän asti, clientin käynnistykseen tarvitsee testimielessä komentorivi-parametreja:
Serveri:
Code: Select all
Include "Libs\cbNetwork.cb" //Includes networking stuff
Include "Libs\Nettivakiot.cb" //Includes some constans what you can use in networking
Type PELAAJA //Määritellään Clientin muuttujia
Field id As String
Field points As Byte
Field name As String
Field x As integer
Field y As integer
Field opponent As String
EndType
SAFEEXIT OFF
//tarkistetaan onko komento validi
//jos ei, poistutaan
//jos on, aloitetaan serveri
If Len(CommandLine())=0 Then
MakeError "Usage: Server.exe <PORT>"
End
ElseIf Int(CommandLine())=0 Then
MakeError "You had been used incorrct parameter into port!"
End
Else
infoByte = 0
InitServer( Int(CommandLine()), 200 )
SetWindow "Server"
_Net_InitMemBlock()
Repeat
rtn = ServerRead()
// Jos datan vastaanotto onnistui
If rtn = 0 Then
// Luetaan "turha" muistipalan koko
_Net_GetInt()
// Luetaan dataa
infoByte = _Net_GetByte()
EndIf
If infoByte = INFO_STARTING_CONNECTION Then
// Uusi käyttäjä linjoilla
user.PELAAJA = New(PELAAJA)
user\id = Net_ClientId
user\name = _Net_getString()
user\x = 0
user\y = 0
user\opponent = ""
Print "Server: New user was connected succesfully"
ElseIf infoByte = INFO_CLOSING_CONNECTION Then
// Client on sulkemassa yhteyttä
Print "Server: User was loged out"
ElseIf infoByte = INFO_GET_PLAYERLIST Then
// Client haluaa pelaajalistan
Print "Server: User wants playerlist, let's send it To him/her"
ElseIf infoByte = INFO_MOVE_UP Then
//Client liikkuu ylös, miten reagoidaan
aktiivinen.PELAAJA = 0
For user.PELAAJA = Each PELAAJA
If user\id = NET_ClientId Then
aktiivinen=user
EndIf
Next user
aktiivinen\y = aktiivinen\y - 2
ElseIf infoByte = INFO_MOVE_DOWN Then
//Kuten yllä mutta vain silloin kun liikutaan alas
aktiivinen.PELAAJA = 0
For user.PELAAJA = Each PELAAJA
If user\id = NET_ClientId Then
aktiivinen=user
EndIf
Next user
aktiivinen\y = aktiivinen\y + 2
EndIf
Forever
EndIf
Client:
Code: Select all
Include "Libs\cbNetwork.cb" //Includes networking stuff
Include "Libs\Nettivakiot.cb" //Includes some constans what you can use in networking
FrameLimit 40
//Player 1 variables
pelaajay=0
pelaajakorkeus=0
pelaajaleveys=0
//Player 2 variables(oppoment)
pelaaja2y=0
pelaaja2korkeus=0
pelaaja2leveys=0
//Networking stuff
Dim rtn As Integer
rtn = InitClient(GetWord(CommandLine(),1),Int(GetWord(CommandLine(),2)))
If rtn <> 0 Then MakeError GetNetErrorString( rtn )
// Alustetaan muistipala
_Net_InitMemBlock()
// Lähetetään serverille tavu, josta se tietää, että client on uusi.
// INFO_STARTING_CONNECTION = 255
_Net_PutByte( INFO_STARTING_CONNECTION )
ClientSend()
rtn = ClientRead()
// Jos tietojen luku onnistui
If rtn = 0 Then
// Luetaan muistipalan alusta sen koko
_Net_GetInt()
// Luetaan "infotavu"
infoByte = _Net_GetByte()
If infoByte = INFO_STARTING_CONNECTION Then
// Serveri hyväksyi yhteyden
_Net_PutByte( INFO_IDLE )
ClientSend()
ElseIf infoByte = INFO_CLOSING_CONNECTION Then
// Serveri vastasi "quit"-viestiin
ElseIf infoByte = INFO_GET_PLAYERLIST Then
// Pelaajalista tulossa
// Tässä kohtaa serveriltä tulisi myös pelaajalista
EndIf
EndIf
BTW. jos haluutte testata serveriä, niin teidän pitää tehdä siitä .exe jotta se ja clientti voitaisiin ajaa samaan aikaan
Re: Tyhmät kysymykset (I/2011)
Posted: Tue Mar 27, 2012 7:28 pm
by valscion
Unohdat klientin puolella tyhjentää ClientSend() funktion jälkeen muistipalan sisällön komennolla _Net_InitMemBlock(), joten vanha sisältö lähetetään uudelleen palvelimelle ja se INFO_STARTING_CONNECTION paketti siis lähtee aina vaan uudelleen.
Re: Tyhmät kysymykset (I/2011)
Posted: Tue Mar 27, 2012 7:37 pm
by skorpioni-cb
VesQ wrote:Unohdat klientin puolella tyhjentää ClientSend() funktion jälkeen muistipalan sisällön komennolla _Net_InitMemBlock(), joten vanha sisältö lähetetään uudelleen palvelimelle ja se INFO_STARTING_CONNECTION paketti siis lähtee aina vaan uudelleen.
Mihin mä sen _Net_InitMemBlock()-funkkarin oikein laitan tarkalleen, sinne paikkaan mikä on se missä lähetän sen Info_IDLE-jutun
Re: Tyhmät kysymykset (I/2011)
Posted: Tue Mar 27, 2012 7:41 pm
by valscion
skorpioni-cb wrote:VesQ wrote:Unohdat klientin puolella tyhjentää ClientSend() funktion jälkeen muistipalan sisällön komennolla _Net_InitMemBlock(), joten vanha sisältö lähetetään uudelleen palvelimelle ja se INFO_STARTING_CONNECTION paketti siis lähtee aina vaan uudelleen.
Mihin mä sen _Net_InitMemBlock()-funkkarin oikein laitan tarkalleen, sinne paikkaan mikä on se missä lähetän sen Info_IDLE-jutun
Vastaanpa lainaamalla omasta viestistäni tärkeän kohdan.
Unohdat klientin puolella tyhjentää ClientSend() funktion jälkeen muistipalan sisällön komennolla _Net_InitMemBlock()
Re: Tyhmät kysymykset (I/2011)
Posted: Tue Mar 27, 2012 8:29 pm
by skorpioni-cb
VesQ wrote:skorpioni-cb wrote:VesQ wrote:Unohdat klientin puolella tyhjentää ClientSend() funktion jälkeen muistipalan sisällön komennolla _Net_InitMemBlock(), joten vanha sisältö lähetetään uudelleen palvelimelle ja se INFO_STARTING_CONNECTION paketti siis lähtee aina vaan uudelleen.
Mihin mä sen _Net_InitMemBlock()-funkkarin oikein laitan tarkalleen, sinne paikkaan mikä on se missä lähetän sen Info_IDLE-jutun
Vastaanpa lainaamalla omasta viestistäni tärkeän kohdan.
Unohdat klientin puolella tyhjentää ClientSend() funktion jälkeen muistipalan sisällön komennolla _Net_InitMemBlock()
Joojoo, mutta se silti lähettää sitä pakettia mitä ilmeisimmin kun se jatkaa sitä kokoajan sitä viestin tulostusta
Re: Tyhmät kysymykset (I/2011)
Posted: Tue Mar 27, 2012 10:54 pm
by valscion
Et muuta palvelimen puolella infoByte muuttujaa enää sen jälkeen, kun olet kerran sen lukenut. Aseta infoByte vaikkapa nollaksi ennen kuin kutsut funktiota ServerRead() niin ei tule vääriä ilmoituksia.
Re: Tyhmät kysymykset (I/2011)
Posted: Wed Mar 28, 2012 7:03 am
by skorpioni-cb
VesQ wrote:Et muuta palvelimen puolella infoByte muuttujaa enää sen jälkeen, kun olet kerran sen lukenut. Aseta infoByte vaikkapa nollaksi ennen kuin kutsut funktiota ServerRead() niin ei tule vääriä ilmoituksia.
Joo täytynee kokeilla, mä taidan tehä ekan julkasuversion jälkeen node.js-version servusta, miten se ajetaan sitten kun se on tehty?
Re: Tyhmät kysymykset (I/2011)
Posted: Wed Mar 28, 2012 8:43 am
by Latexi95
skorpioni-cb wrote:
Joo täytynee kokeilla, mä taidan tehä ekan julkasuversion jälkeen node.js-version servusta, miten se ajetaan sitten kun se on tehty?
Itse en ole ikinä käyttänyt node.js:ssää, mutta googlettamalla "node.js" tuo selvisi. Eli lataa tuo node.js ja sitten vain konsolilta: "node <tiedosto jossa koodi on>". Suosittelen googlen käyttöä. Tuollaiseen kysymykseen löytää vastauksen nopeammin googlen avulla kuin kysymällä foorumeilta.
Re: Tyhmät kysymykset (I/2011)
Posted: Wed Mar 28, 2012 3:29 pm
by Viltzu
skorpioni-cb wrote:VesQ wrote:Et muuta palvelimen puolella infoByte muuttujaa enää sen jälkeen, kun olet kerran sen lukenut. Aseta infoByte vaikkapa nollaksi ennen kuin kutsut funktiota ServerRead() niin ei tule vääriä ilmoituksia.
Joo täytynee kokeilla, mä taidan tehä ekan julkasuversion jälkeen node.js-version servusta, miten se ajetaan sitten kun se on tehty?
viewtopic.php?p=58213#p58213
Tähän tapaan varmaan onnistuu.