Elkuista vaan...
Elkuista vaan...
Miten saa tehtyä tyypi objectille toimivat elkut?
Yritin tehdä ne objectintegerin avulla mutta huonolla menestyksellä.
Neuvoja kaivattais...
Yritin tehdä ne objectintegerin avulla mutta huonolla menestyksellä.
Neuvoja kaivattais...
Re: Elkuista vaan...
Esim. Näin:
Eli luodaan instanssi "hp". Kun "jotain_tapahtuu", vähennetään elkkiä ja jos elkit loppuvat, poistetaan objekti.
Muuta "jotain_tapahtuu" haluamaksesi. esimerkiksi: ObjectsOverlap(pelaaja, objekti\obj)
Code: Select all
Type OBJEKTIT
Field obj //objekti
Field hp //elkut
EndType
---------------
//Päivitetään objektit
For objekti.OBJEKTIT = Each OBJEKTIT
If jotain_tapahtuu Then
objekti\hp = objekti\hp - 2 //muuta haluamaksesi
EndIf
//----
If objekti\hp < 1 Then //jos hp on pienempi kuin yksi niin poistetaan objekti
DeleteObject objekti\obj
Delete objekti
EndIf
Next objekti
Muuta "jotain_tapahtuu" haluamaksesi. esimerkiksi: ObjectsOverlap(pelaaja, objekti\obj)
Re: Elkuista vaan...
Mitenkä saa asetettua, paljonko elkkua on alussa?
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
Re: Elkuista vaan...
tuo ennen noita vähentämisiäjesperx96 wrote:Mitenkä saa asetettua, paljonko elkkua on alussa?
Code: Select all
objecti/hp=100
EDIT:
NO ei mitt sitte..
Last edited by rami123 on Sat May 16, 2009 9:56 pm, edited 1 time in total.
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: Elkuista vaan...
Eikös se ole \ eikä /?rami123 wrote:tuo ennen noita vähentämisiäCode: Select all
objecti/hp=100
Re: Elkuista vaan...
No kiitos kuitenkin. Oliko se noin helppoa?
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
Re: Elkuista vaan...
No, siis aina kun teet uuden objektin tyyppi-kokoelmaan, asetat siinä samalla sen HP:ksi 100 tai mitä ikinä haluatkaan. Esim.jesperx96 wrote:No kiitos kuitenkin. Oliko se noin helppoa?
Code: Select all
Type LEHMAT
Field obj //objekti
Field hp //elkut
EndType
master_lehma = LoadObject("Media\cow.bmp") // Ladataan objektiksi lehmä, josta luodaan kopioita
ShowObject master_lehma, OFF // Ei näyteta kopioitavaa lehmää
//---------------
Repeat
If KeyHit(cbKeySpace) Then // Jos painettiin välinäppäintä...
newLehma.LEHMAT = New(LEHMAT) // Luodaan uusi lehmä kokoelmaan
newLehma\obj = CloneObject(master_lehma) // Kopioidaan master_lehma objekti (nopea tapa)
PositionObject newLehma\obj, Rand(-200,200), Rand(-150,150)
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvv
newLehma\hp = Rand(1,10) // <---------------- Elkuiksi 1-10
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ObjectPickable newLehma\obj, 1 // Asetetaan niin, että objekti voidaan poimia hiirellä
EndIf
// Poimitaan objektit
CameraPick MouseX(), MouseY()
// Tallennetaan poimitun objektin tunnus tähän muuttujaan
e=PickedObject()
DrawGame // Ettei teksti jäisi lehmien alle piiloon
//Päivitetään objektit
For lehma.LEHMAT = Each LEHMAT
If e=lehma\obj Then // Jos poimittu objekti oli tämä lehma
teksti$ = "HP: " + lehma\hp // Ruudulla näytettävä teksti
If MouseUp(1) Then
// Jos painettiin hiirtä, vähennä hp:ta
lehma\hp = lehma\hp - 1 //muuta haluamaksesi
EndIf
EndIf
//----
If lehma\hp < 1 Then //jos hp on pienempi kuin yksi niin poistetaan objekti
DeleteObject lehma\obj
Delete lehma
EndIf
Next lehma
If e Then
Text 0,0, teksti$
Else
Text 0, 0, "Luo lehmä painamalla välilyöntiä"
Text 0,17, "Vie hiiri lehmän päälle ja"
Text 0,30, "klikkaa sitä vähentääksesi elkkua"
EndIf
DrawScreen
Forever
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: Elkuista vaan...
Joo kyllä tyypeistä tiesin jo perusteet, en vaan tiennyt että fieldeille voi asettaa kokonaislukuarvoja
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Elkuista vaan...
Niinno, objektin kahvakin on kokonaisluku, määräytyypi latausjärjestyksen mukaan.jesperx96 wrote:Joo kyllä tyypeistä tiesin jo perusteet, en vaan tiennyt että fieldeille voi asettaa kokonaislukuarvoja :)
Code: Select all
If LoadObject("media/guy.bmp", 360) <>0 Then // jos lataus onnistuu. tässä voisi olla <>0:n sijaan =1, jos haluttaisiin olla varmoja objektin numerosta
Repeat
TurnObject 1, 1 //pyöritellään objektia 1
DrawScreen
Forever
EndIf
Ja $- sekä #-merkeillä voidaan käyttää fieldeissä myös merkkijonoja ja liukulukuja (myös "as string" ja kaverit toiminevat, en nyt muista)
Re: Elkuista vaan...
No niin. Yritin tehdä ihan perus putkiräiskintää, mutta tuli ongelma. Nimittäin mavi, joka liittyy ilmiselvästi energian vähennykseen. En ole sisentänyt tai kommentoinut koodia, sorry. Voisitteko korjata mavin?
Code: Select all
Type VIHUT
Field hp
Field obj
EndType
Type PANOKSET
Field obj
EndType
SCREEN 1024,768,0,0
kartta=LoadMap("C:\Projekti\Media\maze.til","C:\Projekti\Media\tileset2.png")
ukko=LoadObject("Media\soldier.bmp",360)
vihu=LoadObject("Media\ukkeli2-.bmp",360)
pati=LoadObject("Media\bullet.bmp",360)
tähtäin=LoadObject("Media\crosshair.bmp",360)
SetupCollision ukko,kartta,1,4,2
ShowObject vihu,OFF
ShowObject pati,OFF
vih.VIHUT=New(VIHUT)
vih\obj=CloneObject(vihu)
PositionObject vih\obj,Rand(-512,512),Rand(-384,384)
PositionObject ukko, Rand(-512,512),Rand(-384,384)
Repeat
If KeyDown (cbkeyw) Then MoveObject ukko,2.5
If KeyDown (cbkeys) Then MoveObject ukko,-1
If KeyDown (cbkeya) Then MoveObject ukko,0,-1.5
If KeyDown (cbkeyd) Then MoveObject ukko,0,1.5
ScreenPositionObject tähtäin, MouseX(), MouseY()
CloneCameraPosition ukko
PointObject ukko,tähtäin
PointObject vihu,ukko
If reload>0 Then reload=reload-1
If MouseHit(1) And reload=0 Then
luoti.PANOKSET= New(PANOKSET)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj, ukko
CloneObjectOrientation luoti\obj, ukko
reload=8
EndIf
For luoti.PANOKSET = Each PANOKSET
MoveObject luoti\obj,20
If GetMap (2,ObjectX(luoti\obj),ObjectY(luoti\obj))Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
If GetMap (2,ObjectX(vih\obj),ObjectY(vih\obj))Then
DeleteObject vih\obj
Delete vih
vih.VIHUT=New (VIHUT)
vih\obj=CloneObject(vihu)
PositionObject vih\obj,Rand(-512,512),Rand(-384,384)
EndIf
If ObjectSight (ukko,vih\obj) Then
PointObject vih\obj,ukko
MoveObject vih\obj,2
EndIf
vih\hp=100
For vih.VIHUT = Each VIHUT
If ObjectsOverlap (luoti\obj,vih\obj) Then vih\hp=vih\hp-2
If vih\hp < 1 Then
DeleteObject vih\obj
Delete vih
EndIf
Next vih
DrawScreen
Forever
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
Re: Elkuista vaan...
[quote="jesperx96"]No niin. Yritin tehdä ihan perus putkiräiskintää, mutta tuli ongelma. Nimittäin mavi, joka liittyy ilmiselvästi energian vähennykseen. En ole sisentänyt tai kommentoinut koodia, sorry. Voisitteko korjata mavin?
luoti\obj ei ole olemassa tuolla rivillä. Sinun täytyy siirtää vihulogiikka luotien tarkistusten alkuun.
Code: Select all
...If ObjectsOverlap (luoti\obj,vih\obj) Then vih\hp=vih\hp-2...
Re: Elkuista vaan...
Koitin niska limassa(no ei ihan) korjata tätä ja en onnistunut vaikka käänsin ja väänsin miten koodia. Voiko joku korjata sen jos on aikaa ja haluaa? MAV tulee nyt vasta kun yritän ampua. En ole vielä ihan perillä näistä tyypeistä
Code: Select all
Type VIHUT
Field hp
Field obj
EndType
Type PANOKSET
Field obj
EndType
SCREEN 1024,768,0,0
kartta=LoadMap("C:\Projekti\Media\maze.til","C:\Projekti\Media\tileset2.png")
ukko=LoadObject("Media\soldier.bmp",360)
vihu=LoadObject("Media\ukkeli2-.bmp",360)
pati=LoadObject("Media\bullet.bmp",360)
tähtäin=LoadObject("Media\crosshair.bmp",360)
SetupCollision ukko,kartta,1,4,2
ShowObject vihu,OFF
ShowObject pati,OFF
vih.VIHUT=New(VIHUT)
vih\obj=CloneObject(vihu)
PositionObject vih\obj,Rand(-512,512),Rand(-384,384)
PositionObject ukko, Rand(-512,512),Rand(-384,384)
Repeat
If KeyDown (cbkeyw) Then MoveObject ukko,2.5
If KeyDown (cbkeys) Then MoveObject ukko,-1
If KeyDown (cbkeya) Then MoveObject ukko,0,-1.5
If KeyDown (cbkeyd) Then MoveObject ukko,0,1.5
If ObjectSight (ukko,vih\obj) Then
PointObject vih\obj,ukko
MoveObject vih\obj,2
EndIf
ScreenPositionObject tähtäin, MouseX(), MouseY()
CloneCameraPosition ukko
PointObject ukko,tähtäin
PointObject vihu,ukko
If reload>0 Then reload=reload-1
If MouseHit(1) And reload=0 Then
luoti.PANOKSET= New(PANOKSET)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj, ukko
CloneObjectOrientation luoti\obj, ukko
reload=8
EndIf
vih\hp=100
For luoti.PANOKSET = Each PANOKSET
MoveObject luoti\obj,20
For vih.VIHUT= Each VIHUT
If ObjectsOverlap (vih\obj,luoti\obj) Then vih\hp= vih\hp-20
If vih\hp <1 Then
DeleteObject vih\obj
Delete vih
EndIf
Next vih
If GetMap (2,ObjectX(luoti\obj),ObjectY(luoti\obj))=True Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
DrawScreen
Forever
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
Re: Elkuista vaan...
No virhe tuli siinä kun käsittelit vihua For->Each silmukan ulkopuolella.jesperx96 wrote:Koitin niska limassa(no ei ihan) korjata tätä ja en onnistunut vaikka käänsin ja väänsin miten koodia. Voiko joku korjata sen jos on aikaa ja haluaa? MAV tulee nyt vasta kun yritän ampua. En ole vielä ihan perillä näistä tyypeistäCode: Select all
koodia...
Alussa se toimi koska tyypin osoitin jäi viimeksi luotuun vihuun.
Kun loit jäsenen "panoksiin" niin panoksien For->Each silmukka alkoi pyöriä ja
sen mukana myös vihujen For->Each. For->Each silmukka sotki
tyypin osoittimen paikan ja sen takia seuraavalla kerralla vihun liikutuksessa
ohjelmasi ei enää tiennyt missä tyypin jäsenessä ollaan.
Ja sitten kannattaa piiloittaa varsinainen "Master Vihu"
Tuossa korjattu koodi.
Code: Select all
Type VIHUT
Field hp
Field obj
EndType
Type PANOKSET
Field obj
EndType
SCREEN 1024,768,0,0
kartta=LoadMap("C:\Projekti\Media\maze.til","C:\Projekti\Media\tileset2.png")
ukko=LoadObject("Media\soldier.bmp",360)
vihu=LoadObject("Media\ukkeli2-.bmp",360)
ShowObject vihu,OFF
pati=LoadObject("Media\bullet.bmp",360)
tähtäin=LoadObject("Media\crosshair.bmp",360)
SetupCollision ukko,kartta,1,4,2
ShowObject vihu,OFF
ShowObject pati,OFF
vih.VIHUT=New(VIHUT)
vih\obj=CloneObject(vihu)
vih\hp=100
PositionObject vih\obj,Rand(-512,512),Rand(-384,384)
PositionObject ukko, Rand(-512,512),Rand(-384,384)
Repeat
If KeyDown (cbkeyw) Then MoveObject ukko,2.5
If KeyDown (cbkeys) Then MoveObject ukko,-1
If KeyDown (cbkeya) Then MoveObject ukko,0,-1.5
If KeyDown (cbkeyd) Then MoveObject ukko,0,1.5
For vih.VIHUT=Each VIHUT
If ObjectSight (ukko,vih\obj) Then
PointObject vih\obj,ukko
MoveObject vih\obj,2
EndIf
Next vih
ScreenPositionObject tähtäin, MouseX(), MouseY()
CloneCameraPosition ukko
PointObject ukko,tähtäin
If reload>0 Then reload=reload-1
If MouseHit(1) And reload=0 Then
luoti.PANOKSET= New(PANOKSET)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj, ukko
CloneObjectOrientation luoti\obj, ukko
reload=8
EndIf
For luoti.PANOKSET = Each PANOKSET
MoveObject luoti\obj,6
For vih.VIHUT= Each VIHUT
If ObjectsOverlap (vih\obj,luoti\obj) Then vih\hp= vih\hp-20
If vih\hp <1 Then
DeleteObject vih\obj
Delete vih
EndIf
Next vih
If GetMap (2,ObjectX(luoti\obj),ObjectY(luoti\obj))=True Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
DrawScreen
Forever
Re: Elkuista vaan...
Kiitti paljon!
We see the lines in chalk
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
The warning signs in where we walk
In the shadows of the cities maze
To try and fight for better days
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: Elkuista vaan...
Sisentämiseen kannattaa panostaa alusta asti, jolloin virheiden etsiminen on helpompaa, ja muiltakin saa herkemmin apua.
CoolBasic henkilökuntaa
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras