![]() |
![]() |
|
|||||||
| 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.281
Zahvalnice: 2.219
Zahvaljeno 5.018 puta na 2.924 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 | |
|
|