View previous topic :: View next topic |
Author |
Message |
snwlv
Joined: 10 Jan 2010 Posts: 86
|
Posted: Fri Mar 26, 2010 4:57 pm Post subject: Sekojoša kamera |
|
Atkal mani ir piemeklējusi neliela problēma.Šoreiz runa iet par kameru.
Atradu pamācību-kura man liekas mazliet dīvaina.
http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/
Lieta tāda kad nav pilns source kods un pat kļūdains.
Varētu teikt ka tas bija vienīgais "pozīciju" mainošās kameras kods.
no koda nepiciešams būtu pozicijas maiņa un zooms,bet nezinu ko likt to vietā jo na norādīti < Rotation un citi.
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Mar 26, 2010 6:49 pm Post subject: |
|
< ir html entīte < simbolam.
> ir html entīte > simbolam.
& ir html entīte " simbolam.
Pozīcijas maiņu veic ar Move metodi (vai Pos propertiju), un attiecīgi zoom maiņu ar Zoom propertiju. Loģiski, ne? |
|
Back to top |
|
|
snwlv
Joined: 10 Jan 2010 Posts: 86
|
Posted: Fri Mar 26, 2010 7:29 pm Post subject: |
|
Paldies
kā saprast
Quote: | cam.get_transformation(device /*Send the variable that has your graphic device here*/)); |
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Mar 26, 2010 8:00 pm Post subject: |
|
Tas nozīmē, ka get_transformation metodei pirmajā argumentā ir jāpadod graphics device klases objekts (nezinu kur XNA tādu dabūt). |
|
Back to top |
|
|
snwlv
Joined: 10 Jan 2010 Posts: 86
|
Posted: Fri Mar 26, 2010 11:49 pm Post subject: |
|
Itkā visu izdarīju bet nevaru uzlikt to ka piespiežot pogu pozicija mainās.
uzspiežu bet nekas nenotiek Bet ja vienkārši uzliek
Code: | cam.Pos = new Vector2(200.0f,200.0f); | tad viņš atrodas norādītajās koardinātēs. |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sat Mar 27, 2010 12:45 am Post subject: |
|
Mums zīlēt kristāla bumbā kā tu kodā uzrakstīji to, kad nekas nenotiek? |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sat Mar 27, 2010 11:39 am Post subject: |
|
Quote: | uzspiežu bet nekas nenotiek |
Daži varianti:
-aizmirsi atkal vispirms mainīgajam piešķirt vērtību
-kaut ko ne tur ierakstīji
Kods pastāstītu vairāk.. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
snwlv
Joined: 10 Jan 2010 Posts: 86
|
Posted: Sat Mar 27, 2010 12:06 pm Post subject: |
|
Code: | KeyboardState klaviatura = Keyboard.GetState();
_pos += AtrumsSpeletajam;
if (klaviatura.IsKeyDown(Keys.Right))
{
cam.AtrumsSpeletajam.X += 5.0f;
} |
|
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sat Mar 27, 2010 12:42 pm Post subject: |
|
Varbūt:
-šis kods nemaz neizpildās (uzliec breakpointu, lai pārbaudītu)
-esi kļūdaini nokopējis kodu (un neatbilstošus mainīgo nosaukumus esi salabojis, veidojot jaunus - "_pos" un "Pos")
P.S. Vienmēr vispirms jāizpēta kods, kuru taisies kopēt. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Tenjou
Joined: 22 Nov 2005 Posts: 275
|
Posted: Sat Mar 27, 2010 1:22 pm Post subject: |
|
1. gadījumā tu norādi sākuma pozīciju, bet 2. tu norādi ātrumu kādu kamera parvietojās. Lai no tā ātruma jēga būtu, ir noteikti jaizsauc kaut kas līdzīgs update() funkcijai, kas ātrumu pieskaitītu pozīcijai. Ja tādas nav(bet iesaku izveidot), tad vari manuāli pieskaitīt -> pozicija += atrums * delta_laiks; |
|
Back to top |
|
|
snwlv
Joined: 10 Jan 2010 Posts: 86
|
Posted: Sat Mar 27, 2010 3:17 pm Post subject: |
|
Tā pat nekas nemainās
Code: | float delta_laiks = (float)gameTime.ElapsedGameTime.TotalSeconds;
_pos += AtrumsSpeletajam;
KeyboardState klaviatura = Keyboard.GetState();
if (klaviatura.IsKeyDown(Keys.W))
AtrumsSpeletajam.Y += 30.0f * delta_laiks;
if (klaviatura.IsKeyDown(Keys.S))
AtrumsSpeletajam.Y -= 30.0f * delta_laiks;
if (klaviatura.IsKeyDown(Keys.A))
AtrumsSpeletajam.X += 30.0f * delta_laiks;
if (klaviatura.IsKeyDown(Keys.D))
AtrumsSpeletajam.X -= 30.0f * delta_laiks; |
Te būs pastebin kods uz manu failu http://pastebin.com/uTQKrNJm |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sat Mar 27, 2010 3:51 pm Post subject: |
|
Nebija laika īpaši iedziļināties, bet izskatījās, ka tur stipri daudz kļūdu. Iesaku pameklēt pamācību, kura izskaidro labāk C#, tieši objektu (mainīgo) "redzamību", darbības ilgumu un precīzāk iemācīties lasīt koda darbības ceļu. Iespējams, ka noderīgi būtu pamācīties vispirms kādu citu valodu, kurā ar objektu redzamību nav jāķēpājas pašā sākumā. Pat C++ šajā ziņā ir vienkāršāks. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Tenjou
Joined: 22 Nov 2005 Posts: 275
|
Posted: Sat Mar 27, 2010 4:05 pm Post subject: |
|
AtrumsSpeletajam jaaizvieto ar _pos, jo 30.0f ir pats spēlētāja ātrums, šobrīd tev iznāk paatrinājums, kas nekur netiek izmantots. Ja tev nav nekāda specifiska kamera, tad vnk izdari tā, ka kameras pozicija ir vienāda ar spēlētāja pozīciju, tādejādi kamera vienmēr skatīsies uz spēlētāju. |
|
Back to top |
|
|
snwlv
Joined: 10 Jan 2010 Posts: 86
|
Posted: Sat Mar 27, 2010 6:32 pm Post subject: |
|
Paldies tenjou nezinu kāpēc pirmstam tas neiešāvās galvā
njam bet kā lai dabuju viņu centrā ? lai speletaja centrs butu vienāds ar kameras centru.
Code: | cam.Pos = SpeletajaPos; |
prmstam esmu to ko līdigu darijis ar 2 sprietiem bet tagad liekas savādāk |
|
Back to top |
|
|
Tenjou
Joined: 22 Nov 2005 Posts: 275
|
Posted: Sat Mar 27, 2010 6:43 pm Post subject: |
|
Tas parasti atkarīgs no projekcijas matricas, bet pieņemu tavā gadījumā vienkārsākais veids, būtu kamerai pieskaitīt izšķirtspēja/2. Respektīvi pos.x += width/2 un pos.y += height/2(vai mīnuss, arī atkarīgs no projekcijas). |
|
Back to top |
|
|
|