![]() |
![]() |
|
Pravljenje igara Programski jezici, tehnike, alatke u službi pravljenja igara... |
![]() |
|
Alatke vezane za temu | Vrste prikaza |
![]() |
#1 |
Član
|
![]()
Pozdrav! Počeo sam da pravim jednostavnu igru u C#. Kockice se random pojavljuju na ekranu i vi trebate da ih upucate. Još nisam ni stigao do dela sa upucavanjem i skorom zato što je baklja koju ispaljuje igrač svaki put sve brža i brža (sve dok ne dostigne brzinu svetlosti). Evo koda:
Kod:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Begaj { public partial class Form1 : Form { public Form1() { InitializeComponent(); Cursor.Hide(); FormBorderStyle = FormBorderStyle.None; WindowState = FormWindowState.Maximized; TopMost = true; } private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.A) { pictureBox1.Location = new Point(pictureBox1.Location.X - 5, pictureBox1.Location.Y); } if (e.KeyCode == Keys.S) { pictureBox1.Location = new Point(pictureBox1.Location.X, pictureBox1.Location.Y + 5); } if (e.KeyCode == Keys.D) { pictureBox1.Location = new Point(pictureBox1.Location.X + 5, pictureBox1.Location.Y); } if (e.KeyCode == Keys.W) { pictureBox1.Location = new Point(pictureBox1.Location.X, pictureBox1.Location.Y - 5); } } private void Form1_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { const string message = "OCES DIZADJES"; const string caption = "IZLAZ"; var result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { Application.Exit(); } } if (e.KeyCode == Keys.Space) { pictureBox7.Visible = true; Timer tajmer = new Timer(); pictureBox7.Location = new Point(pictureBox1.Location.X, pictureBox1.Location.Y - 30); tajmer.Interval = 100; tajmer.Tick += new EventHandler(tajmer_Tick); tajmer.Start(); } } private void timer1_Tick(object sender, EventArgs e) { pictureBox2.Location = new Point((int)(new Random().Next(0, 1000)), (int)(new Random().Next(0, 600))); pictureBox3.Location = new Point((int)(new Random().Next(0, 600)), (int)(new Random().Next(0, 100))); pictureBox4.Location = new Point((int)(new Random().Next(0, 100)), (int)(new Random().Next(0, 60))); pictureBox5.Location = new Point((int)(new Random().Next(0, 1300)), (int)(new Random().Next(0, 500))); pictureBox6.Location = new Point((int)(new Random().Next(0, 400)), (int)(new Random().Next(0, 780))); } private void tajmer_Tick(object sender, EventArgs e) { pictureBox7.Location = new Point(pictureBox7.Location.X, pictureBox7.Location.Y - 30); } } public static class GlobalVariables { public static int a = 0; } } |
![]() |
![]() |
![]() |
#2 |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.131
Zahvalnice: 2.058
Zahvaljeno 4.911 puta na 2.848 poruka
|
![]()
Možda zato što svaki put kad pritisneš spejs, tajmeru dodaješ još jedan tick handler a stari (koji su mu dodeljeni na prethodne pritiske) su i dalje aktivni.
Prvi put kad pritisneš space, tajmer dobija tick handler koji gura kontrolu za 30 piksela uvis u svakom trenutku. Sledeći put kad pritisneš space, dodaješ još jedan tick handler, tako da imaš dva koja guraju za po 30 piksela, odnosno kontrola ide uvis duplo brže, itd. Rešenje: 1. Tajmer kreiraj i dodeli mu tick handler u konstruktoru forme, a ne na pritisak na space. Ne startuj ga još uvek. 2. U tajmer_Tick, pre nego što pomeriš pictureBox uvis, proveravaj da li je pictureBox premašio gornju koordinatu forme (if pictureBox.Top < 0) i ako jeste, stopiraj tajmer. 3. Pritiskom na Space samo nasetuj pictureBox na određenu lokaciju i aktiviraj tajmer sa Start, kako bi (ponovo) počeo da radi. I čisto radi optimizacije, kontrolu pomeraj uvis dekrementiranjem Top-a, a ne kreiranjem novog Point-a svaki put. |
![]() |
![]() |
Sledeći korisnik se zahvaljuje korisniku voodoo_ na korisnoj poruci: | ||
Borisav Živanović (15.6.2015) |
![]() |
Bookmarks sajtovi |
Tagovi |
igra |
Alatke vezane za temu | |
Vrste prikaza | |
|
|