If enemy\enemy_hp < 1 Then
PaintObject pahis\obj, dead_human
EndIf
Next pahis
Kun mulla on tollanen niin, kun on "tappanut" yhden "vihollisen" ja kun "tapan" seuraavan tulee Memory access violation! Miksi?
Jos laitan tuon "paintObjektin" tilalle "deleteobject pahis\obj, silloin ei tule mitään ongelmia.
Kaikki for, ja each hommat pitäisi olla ihan "oikein". (Tuossa koodinpätkässä ei niitä näy, mutta kyllä ne minulla on siellä).
Tuossa on ainakin se ongelma että kun kerran olet saanut vihulta hp:n alle yhden, niin joka ikisellä looppauskierroksella päällystät sen uudelleen dead_human-objektilla.
Kannattaisi ehkä mielummin tehdä erillinen type kuolleita vihuja varten, jolloin voisit poistaa tuon juuri tapetun vihun elävien vihujen type-kokoelmasta ja luoda uuden kuolleen vihun siihen kuolleiden typeen komennoilla CloneObject, CloneObjectPosition ja ehkä CloneObjectOrientation.
If enemy\enemy_hp < 1 Then
PaintObject pahis\obj, dead_human
EndIf
Next pahis
Kun mulla on tollanen niin, kun on "tappanut" yhden "vihollisen" ja kun "tapan" seuraavan tulee Memory access violation! Miksi?
Jos laitan tuon "paintObjektin" tilalle "deleteobject pahis\obj, silloin ei tule mitään ongelmia.
Kaikki for, ja each hommat pitäisi olla ihan "oikein". (Tuossa koodinpätkässä ei niitä näy, mutta kyllä ne minulla on siellä).
Jos dead_human on kuva, se johtuu siitä, että sen nimen edessä pitäisi olla miinusmerkki.
Re: Tyhmät kysymykset (I/2011)
Posted: Wed Aug 31, 2011 5:18 pm
by skinkken
Tällainen huvittava cb:n bugi: (ei testattavaa koodia)
'loopissa
If erikoisuus=2 Then
SetWindow "3"
SetWindow "4"
For i=1 To 500
If pati(i,1)=1 Then
If ObjectsOverlap(pati(i,2),kivi) Then PlayObject kivi,1:pati(i,5)=1:jrty=PlaySound("files/sound/raani.wav",35)
EndIf
Next i
EndIf
kun erikoisuus muutetaan kakkoseksi, peli MAVaa ja windowissa lukee 3. Eli peli ihan muuten vain tilttaa noiden kahden setwindowin välissä. Alun perin siinä oli playobject, ja vaikka poistan sen, se silti MAVaa siinä.
Yritin lisäillä random rivejä ja komentoja mutta ei auttanut. Muilla jotain ajatuksia?
EDIT:
Säädin koodin kanssa ja nyt se mavittaa drawgamessa:
Onnistuin korjaamaan ongelman. Peli lakkasi MAVittamasta kun korjasin yhden kirjoitus virheen joka ei liitynyt mitenkään asiaan. Huomasin kuitenkin että pelin olisi pitänyt jo mavittaa siinä kohdassa jossa oli kirjoitusvirhe, mutta mavi olikin oudosti siirtynyt drawgamen luokse. tämän voisi chaosworm lisätä usein kysyttyihin ongelmiin, jos jollakin muulla olisikin sama ongelma.
Re: Tyhmät kysymykset (I/2011)
Posted: Wed Aug 31, 2011 6:33 pm
by Awaclus
Tehty.
EDIT: Miksi tämän ketjun nimi on edelleen "Tyhmät kysymykset", vaikka aikoja sitten on jo todettu, että täällä kysymysten esittäminen ei ole millään tavalla tyhmää? Eikö esimerkiksi "Yksinkertaiset kysymykset", "Lyhyet kysymykset" tai "Kysymykset, joihin on lyhyt vastaus" olisi parempi nimi? Kysymysten ns. tyhmyys nostaa kynnystä kirjoittaa tähän ketjuun aloittelijana, ja sitten kun tekee oman ketjun jollekin kysymykselle, saa kilon suolaa niskaansa, kun on ollut tyhmä ja kirjoittanut väärään paikkaan.
Mielestäni se, että nimi on aina ollut "Tyhmät kysymykset" ja se, että foorumin wanhat käyttäjät ovat jo ehtineet tottua tähän nimeen ovat huonoja perusteluita nimen vaihtamisen tekemättä jättämiselle. Jos koskaan ei tapahtuisi mitään muutosta, koko ketjua ei edes olisi olemassa. Käsittääkseni CoolBasicin on myös tarkoitus olla aloittelijaystävällinen ohjelmointikieli, joten miksi foorumin sitten pitäisi olla konkariystävällisempi kuin aloittelijaystävällisempi?
SCREEN 800,600
1While 1
2 If button(10,10,100,20,"Peliin") Then
3include "koodi.cb"
4If button(10,40,100,20,"lopeta") then end
5DrawScreen
6Wend
7
8 Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
9 If MouseX()>x-1 And MouseY()>y-1 And MouseX()<x+w+1 And MouseY()<y+h+1 Then
10 If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
11 If MouseUp(1) Then Return True
12 Else
13 Color 220,220,220
14 EndIf
15 Box x+s,y,w-(s*2),h
16 Box x,y+s,w,h-(s*2)
17 Circle x,y,s*2
18 Circle x+w-s*2,y,s*2
19 Circle x+w-s*2,y+h-s*2,s*2
20 Circle x,y+h-s*2,s*2
21 Color cbblack
22 CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
23 EndFunction
kun painan f5 nappia niin: File "koodi.cb" alerday inluded for now,include files are banned from being inluded twice sitten painan ok:ta
SCREEN 800,600
1While 1
2 If button(10,10,100,20,"Peliin") Then
3include "koodi.cb"
4If button(10,40,100,20,"lopeta") then end
5DrawScreen
6Wend
7
8 Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
9 If MouseX()>x-1 And MouseY()>y-1 And MouseX()<x+w+1 And MouseY()<y+h+1 Then
10 If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
11 If MouseUp(1) Then Return True
12 Else
13 Color 220,220,220
14 EndIf
15 Box x+s,y,w-(s*2),h
16 Box x,y+s,w,h-(s*2)
17 Circle x,y,s*2
18 Circle x+w-s*2,y,s*2
19 Circle x+w-s*2,y+h-s*2,s*2
20 Circle x,y+h-s*2,s*2
21 Color cbblack
22 CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
23 EndFunction
kun painan f5 nappia niin: File "koodi.cb" alerday inluded for now,include files are banned from being inluded twice sitten painan ok:ta
error line 7 (jotain vastaavaa)
mikä vikana??
Includea ei voi käyttää noin. Eikä kannata. Laita include koodin alkuun, ja mene siellä olevaan peliin funktion avulla.
SCREEN 800,600
While 1
If button(10,10,100,20,"Peliin") Then
Include "koodi.cb"
EndIf
If button(10,40,100,20,"lopeta") then end
DrawScreen
Wend
Function Button(x As integer,y As integer,w As integer,h As integer,t As String,s As integer = 5)
If MouseX()>x-1 And MouseY()>y-1 And MouseX()<x+w+1 And MouseY()<y+h+1 Then
If MouseDown(1) Then Color 200,200,200 Else Color 190,190,190
If MouseUp(1) Then Return True
Else
Color 220,220,220
EndIf
Box x+s,y,w-(s*2),h
Box x,y+s,w,h-(s*2)
Circle x,y,s*2
Circle x+w-s*2,y,s*2
Circle x+w-s*2,y+h-s*2,s*2
Circle x,y+h-s*2,s*2
Color cbblack
CenterText x+w/2,y+h/2-TextHeight(t)/2,t$
EndFunction
Re: Tyhmät kysymykset (I/2011)
Posted: Sat Sep 03, 2011 10:11 pm
by Ihminen
Kuinka saisin tolla "Box" komennolla tehdyn laatikon näkymään objektien ja tilesterillä tehtyjen tasojen päällä?
Re: Tyhmät kysymykset (I/2011)
Posted: Sat Sep 03, 2011 10:29 pm
by Jonez
Käytä komentoa DrawGame ennen niitä piirtokomentoja, jotka haluat piirtää objektien päälle. Älä käytä enempää kuin yhtä DrawGame-komentoa, ellet piirrä toiseen puskuriin (esim. DrawToImage).
Re: Tyhmät kysymykset (I/2011)
Posted: Sun Sep 04, 2011 2:36 pm
by Dimple
Kumiankka wrote:Kyllä sitä includea voi käyttää noin, mutta sieltä puuttuu vain EndIf välistä... Tässä mielestäni täysin toimiva versio:
Kuinka objektin kokoa pystyy muuttamaan nopeasti ja helposti?
Re: Tyhmät kysymykset (I/2011)
Posted: Mon Sep 05, 2011 9:29 am
by Jonez
Code-boxissa olevilla komennoilla, ja suunnilleen siinä näytetyssä järjestyksessä. Tämä ei ehkä ole erityisen nopeaa suorityskyvyn kannalta (älä tee sitä reaaliajassa), koska ResizeImage on niin hidas. Voit vaihtoehtoisesti käyttää Marcoderin ScaleImage()-funktiota, joka on paljon nopeampi kuin ResizeImage.
Voi olla että saat suurennukset (ja pyöritykset) toimimaan reaaliajassa, jos pyörität kuvat etukäteen, ja skaalaat ne ScaleImage():lla. Tällöin ei ehkä kannata käyttää objekteja ollenkaan.
obj = MakeObject( pyoritysarvo )
img = PaintObject( "kuva.png" )
PaintObject obj, -img
//Kun suurennetaan:
tempImg = CloneImage( img ) //Kloonataan kuva niin alkuperäinen säilyy koskemattomana
ResizeImage tempImg, haluttuLeveys, haluttuKorkeus //suurennetaan
PaintObject obj, -tempImg
DeleteImage tempImg //tuhotaan kuva, sitä ei enää käytetä
Re: Tyhmät kysymykset (I/2011)
Posted: Fri Sep 09, 2011 11:50 pm
by Ihminen
Kun on tuo komento Objectorder, kuinka saisin muutettua järjestystä niin, että haluamani objekti menee toiseksi viimeiseksi, eikä viimeiseksi, koska jos se tietty objekti menee viimeiseksi sitä ei enää näy, koska LoadMap...
Re: Tyhmät kysymykset (I/2011)
Posted: Sat Sep 10, 2011 1:19 am
by Jonez
Siirrä kartta viimeiseksi heti kun olet asettanut objektisi viimeiseksi.
Re: Tyhmät kysymykset (I/2011)
Posted: Sat Sep 10, 2011 9:28 am
by Ihminen
Jonez wrote:Siirrä kartta viimeiseksi heti kun olet asettanut objektisi viimeiseksi.
Miten mä saan siirrettyä sen kartan viimeiseksi? xD
Re: Tyhmät kysymykset (I/2011)
Posted: Sat Sep 10, 2011 11:34 am
by naputtelija
Ihminen wrote:
Jonez wrote:Siirrä kartta viimeiseksi heti kun olet asettanut objektisi viimeiseksi.
Miten mä saan siirrettyä sen kartan viimeiseksi? xD
Ei mikään suuri, -1 siirtää alimmaksi ja 1 päällimmäiseksi.
Re: Tyhmät kysymykset (I/2011)
Posted: Sat Sep 10, 2011 1:00 pm
by Paroni
Huomentapäivää vaan kaikille. Sellasta vaan kyselisin, että miksi tämä palauttaa maailmaan X-koordinaatin muuten oikein... paitsi + muuttuu - ja toisinpäin?
//RPG Test 2
//Point 'n' Click -system
//10.9.2011 | 00:52
//
Type NPC
Field Name As String
Field nX
Field nY
EndType
SCREEN 800, 600, 32
//VARIABLES
//Grid related
Grid = 32 //Grid size
//Player related
pX = -16 //Player X
pY = 12 //Player Y
For n = 1 To 1
character.NPC = New (NPC)
character\nX = -16
character\nY = 268
character\Name = "Generic NPC"
Next n
Repeat
DrawGame
Gosub UpdateVariables
Gosub UpdateControls
DrawToWorld ON, OFF, ON
Color 0, 95, 195
Box pX, pY, Grid, Grid, 1 //Player box
Color 195, 95, 0
For character.NPC = Each NPC
Box character\nX, character\nY, Grid, Grid, 1
Text character\nX, character\nY + 13, ""+character\name
Next character
DrawToWorld OFF, OFF, OFF
Color 255, 255, 255
Text 0, 0, "FPS: " +FPS()
Text 0, 10, "X: " +mX +" Y: " +mY
Box bX, bY, Grid, Grid, 0 //Grid cursor -box
DrawScreen
Forever
UpdateVariables:
//Update box coordinates
bX = (MouseX() / Grid) * Grid
bY = (MouseY() / Grid) * Grid
//Change the screen coordinates to world coordinates when clicked
If MouseHit (1) Then
mX = (ScreenWidth() / 2.0) - bX + CameraX()
mY = (ScreenHeight() / 2.0) - bY + CameraY()
EndIf
Return
UpdateControls:
Return
EDIT: Niin ja tosiaan mX = -mX toimii hyvin. Mietin vain miksi tuo ei toimi.
Re: Tyhmät kysymykset (I/2011)
Posted: Sat Sep 10, 2011 2:02 pm
by Jonez
Koska ruutukoordinaatit lasketaan ruudun vasemmasta yläkulmasta niin, että x-akseli on positiivinen oikealle ja y-akseli positiivinen alaspäin. Maailmakoordinaatit taas alkavat ruudun keskeltä (kun camX- ja Y ovat 0), ja x-akseli on oikealle positiivinen, kun taas y-akseli kasvaakin ylöspäin. Eli maailmakoordinaattien ja ruutukoordinaattien y-akselit ovat vastakkaiset.
Edit. vastasin vähän kysymyksen vierestä, mutta idea oli silti oikea. Tässä kuitenkin oikeanlainen koodi, missä koordinaatit pysyvät kohdillaan vaikka kameraa liikuttaisi:
UpdateVariables:
//Update box coordinates
bX = (MouseX() / Grid) * Grid
bY = (MouseY() / Grid) * Grid
//Change the screen coordinates to world coordinates when clicked
If MouseHit (1) Then
mX = (ScreenWidth() / 2.0) + bX + CameraX()
mY = (ScreenHeight() / 2.0) - bY + CameraY()
EndIf
Return
UpdateControls:
MoveCamera (RightKey() - LeftKey()) * Grid, (UpKey() - DownKey()) * Grid
Return
Re: Tyhmät kysymykset (I/2011)
Posted: Sat Sep 10, 2011 2:35 pm
by Paroni
Jonez wrote:Koska ruutukoordinaatit lasketaan ruudun vasemmasta yläkulmasta niin, että x-akseli on positiivinen oikealle ja y-akseli positiivinen alaspäin. Maailmakoordinaatit taas alkavat ruudun keskeltä (kun camX- ja Y ovat 0), ja x-akseli on oikealle positiivinen, kun taas y-akseli kasvaakin ylöspäin. Eli maailmakoordinaattien ja ruutukoordinaattien y-akselit ovat vastakkaiset.
Edit. vastasin vähän kysymyksen vierestä, mutta idea oli silti oikea. Tässä kuitenkin oikeanlainen koodi, missä koordinaatit pysyvät kohdillaan vaikka kameraa liikuttaisi: