[ARHIIV] mängumeistrid
Pole sisse logitud. [Logi sisse ]
Mine lehekülje algusesse
Prinditav versioon | Telli teema e-mailile | Lisa lemmikutesse  
Blitzmax Platvormi probleem
Crypton

Avatar

Liitunud: 18.12.2005
Postitusi: 1604
[EEMAL]




postitati 19.5.2008 10:49 Tsiteeri
Blitzmax Platvormi probleem



Probleem 1

Nimelt hakkasin GM-i libisemise näidet Blitzmaxi ümber tegema.
Asi on hetkel hästi sujunud kuid on väike selline kosmeetiline probleem. Nimelt platvormil üles alla liikudes tekib liikumisel selline 1 pixliline viga. GM-i näites seda loomulikult ei esinenud.

Blitzmax-i kood Tegelase instance-le
Kood:

'Üldine liikumine, mida mõjutab gravitatsioon jms, e. pidev liikumine------------------------
vspeed:+gravity
x=x+(hspeed)
y=y+(vspeed)

'Kokkupuude platvormidega----------------------------------------------------------------------
'Kui tegelane ja platvormi sprite kohtuvad
If ImagesCollide(image,x+hspeed,y+(vspeed),frame, s_flat,flat.x+flat.hspeed,flat.y+flat.vspeed,0)
jump=False 'Teeme hüppamise võimalikuks, võttes hüppes oleku maha
vspeed = (flat.vspeed) 'Tegelane saab platvormi kiirenduse
y = flat.y-8 - ImageHeight(image)/2 'Parandame tegelase asukohta. Et at läbi platvormi ei liiguks
Else
jump=True 'kuna pole platvormil ei saa ka õhust hüpata, nii et hüpe peale
EndIf



GM-i vaste
Kood:

jump=false //ei hüppa platvormil olles
vspeed=other.vspeed //mehike liigub koos platvormiga
move_contact_solid(270,-1)
//libisemise kontroll
if x<other.x{
hspeed=hspeed-other_spd
}
if x>other.x{
hspeed=hspeed+other_spd
}


Ma ei tea palju on vaja veel Blitzmaxi koodi seletada kuna paljud asju oli vaja juurde kirjutada. Kuigi seal see

y = flat.y-8 - ImageHeight(image)/2 'Parandame tegelase asukohta. Et at läbi platvormi ei liiguks

Koodikeses on hetkel viga imo. See peaks olema siis GM-i
move_contact_solid(270,-1) -le sarnane.
Ei tea kas selle sisu just selline on kuid hetkel ta blitzmaxis nii töötab. flat on siis liikuv platvorm.
Ja muidugi nagu GM-i näites annab platvorm ka tegelasele kiirenduse, rohkem üles liikumisel, alla liikumisel kasutab tegelane seda ülemist koodi.

Blitzmax platvormi liikumine:
Kood:

If alarm >0
alarm:-1
Else
vspeed=-vspeed
hspeed=-hspeed
If vspeed>0 And ImagesCollide(image,x,y+vspeed,0, tegelane.image,tegelane.x,tegelane.y,tegelane.frame)
tegelane.vspeed=vspeed
EndIf
alarm = room_speed*2
EndIf


Lisasin praeguses staadiumis oleva faili ka, ehk sealt mõikab paremini:
---------------------------------------------------------------------------------------------------------------------------------------

Probleem 2

Niih. Mõtlesin et lisan platvorme ruumi vähekene juurde. Nüüd on probleem sellega, et kuidas saada määrata, millise objektiga tegelane parasjagu kokku puutes on? Mul seal 7 platvormi ja üks nendest liigub. Aga kõigiga on vaja, et toimuks vastavad operatsioonid. Kuid imagescollide-s on jõle raske määrata just seda instance-i millega tegelane kokkupuutes on. See on minu arust Blitzmaxi ka üks suuremaid miinuseid, kus instance on jõle raske identifitseerida kui vaja kontrollida kokkupuuteid jne.

Tegin küll et platvormi loomisel lisan ta ka listi ja siis uuendan seda listi. Siis käin sama listi läbi veel tegelase instance-s kontrollides siis iga platvormi kokkupuutuvust tegelasega, kuid see on ikkagi puugine, sest ainult viimane platvorm mis listi lisati töötab nii nagu peab.

//Võin siin juttu muuta ka veel, kuna tegelen asjaga pidevalt, seniks kuni muutusi ei ole, ootaks vastuseid.

[Muudetud: 19-5-2008 Crypton]

Lisatud fail: platvorm.rar (13.37kb)
101 korda tõmmatud

Maze I: CryptonRalli III: Crypton<br>
Vaata kasutaja profiili Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum
Crypton

Avatar

Liitunud: 18.12.2005
Postitusi: 1604
[EEMAL]




postitati 1.6.2008 20:41 Tsiteeri


on mingit ideed kuidas seda collision asja paika saada?
Ma olen veel pusinud asjaga ja kohati asja paremaks saanud. Viisin platvormidega collisioni üle platvormi tüüpi. Kuid jama on ikka sellega, et kui tahan jump muutuja 0-ks muuta, nii et ta õhus hüpata ei saaks, mõjub see ainult viimasena loodud platvorm instancega.

Et vb küsiks kuidas reeglina blitzmaxis selliseid asju teha? Imgecollide töötab aga sellele järgnev positsiooni parandus on veits vigane.

Maze I: CryptonRalli III: Crypton<br>
Vaata kasutaja profiili Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum
jorss
Level 12


Liitunud: 25.1.2005
Postitusi: 951
[EEMAL]




postitati 1.6.2008 22:41 Tsiteeri


ära jama per pixel collisionitega, kasuta kahe nelinurga kattuvustesti, see on väga lihtne ja superkiire ja näeb tavaliselt ka parem välja.
Platform II: -DMI-; H0lx&jorssJõulumäng I: h0lx&jorssKambakas I: jorss, Perfoon
Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum

Hetkel loevad seda teemat:
Mitte ühtegi - 1 külaline

Mine lehekülje lõppu





Foorumi algbaas põhineb XMB mootoril, modifitseeritud Valter Pundi poolt
Kodulehekülg on tehtud Valter Pundi poolt vpundi ät gmail punkt komm