Keresés

Új hozzászólás Aktív témák

  • Tomi_78

    tag

    Sziasztok!
    Most kezdtem kóstolgatni a C# programozást, és ehhez egy kis grafikus programot írnék SharpDevelop környezetben. Viszont a programom futtatásakor azt írja ki, hogy:
    "Az "egydenever" név nem szerepel ebben a környezetben"
    illetve a DrawImage-ben a két utolsó paramétert (srcRect és units) nem ismeri, bár nem is tudom, hogy ide miket kéne megadni.
    Tudnátok segíteni ennek a két hibajelenségnek a megoldásában? Íme a kódom:
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;

    namespace Animacios
    {
        /// <summary>
        /// Description of MainForm.
        /// </summary>
        
        public partial class MainForm : Form
        {    
            Bitmap deneverkepe1 = new Bitmap("kepei\\kisdenever1bmp.bmp");
            Bitmap deneverkepe2 = new Bitmap("kepei\\kisdenever2bmp.bmp");
            
            class Deneverek
            {
                public int dirx,diry,kepe;
            };
            
            public MainForm()
            {
                //
                // The InitializeComponent() call is required for Windows Forms designer support.
                //
                InitializeComponent();
                //
                // TODO: Add constructor code after the InitializeComponent() call.
                //
                deneverkepe1.MakeTransparent();
                deneverkepe2.MakeTransparent();
                
                Deneverek[] egydenever = new Deneverek[3];
                int svsz;
                for (int i=0; i<3; i++) {
                    egydenever[i]= new Deneverek();
                    System.Random vsz = new System.Random();
                    svsz = vsz.Next(1);
                    if (svsz==0) {
                        egydenever[i].dirx = -1;
                    } else {
                        egydenever[i].dirx = 1;
                    };
                    svsz = vsz.Next(1);
                    if (svsz==0) {
                        egydenever[i].diry = -1;
                    } else {
                        egydenever[i].diry = 1;
                    };
                    svsz = vsz.Next(1);
                    if (svsz==0) {
                        egydenever[i].kepe = 0;
                    } else {
                        egydenever[i].kepe = 1;
                    };
                };
            }
            void AnimIdozitoTick(object sender, EventArgs e)
            {
                for (int i=0; i<3; i++) {
                    if (egydenever[i].kepe==0) {
                        egydenever[i].kepe=1;
                    }
                    else {
                        egydenever[i].kepe=0;
                    };
                };
            }
            void MozgIdozitoTick(object sender, EventArgs e)
            {
                for (int i=0; i<3; i++) {
                    switch (egydenever[i].dirx) {
                        case -1:
                            if (egydenever[i].Left>0) {
                                egydenever[i].Left-=4;
                            }
                            else egydenever[i].dirx*=-1;
                        break;
                        case 1:
                            if (egydenever[i].Left<800-egydenever[i].Width) {
                                egydenever[i].Left+=4;
                            }
                            else egydenever[i].dirx*=-1;
                        break;
                    };
                    switch (egydenever[i].diry) {
                        case -1:
                            if (egydenever[i].Top>0) {
                                egydenever[i].Top-=4;
                            }
                            else egydenever[i].diry*=-1;
                        break;
                        case 1:
                            if (egydenever[i].Top<600-egydenever[i].Height) {
                                egydenever[i].Top+=4;
                            }
                            else egydenever[i].diry*=-1;
                        break;
                    };
                };
            }
            void MainFormPaint(object sender, PaintEventArgs e)
            {
                for (int i=0; i<3; i++) {
                    if (egydenever[i].kepe==0) {
                        e.Graphics.DrawImage(deneverkepe1,egydenever[i].Left,egydenever[i].Top,srcRect, units);
                    }
                    else {
                        e.Graphics.DrawImage(deneverkepe2,egydenever[i].Left,egydenever[i].Top,srcRect, units);
                    }
                }
            }
        }
    }

  • Tomi_78

    tag

    válasz Alexios #9343 üzenetére

    Szia Alexios!

    Köszönöm a választ; ezzel egyúttal azt a kérdésemet is megválaszoltad, hogy kezdőérték nélküli, dinamikus tömböt hogyan lehet létrehozni. :K
    Még javítottam a kódomon annyit, hogy a képe egy változóba kerüljön, tehát:
    class Deneverek
            {
                public int dirx,diry;
                public Bitmap kepe;
           };                      

    (...)
    if (svsz==0) {
                        egydenever[i].kepe = deneverkepe1;
                    } else {
                        egydenever[i].kepe = deneverkepe2;
                    };

    De ezek után pl. a kirajzolásban nem ismeri fel a képhez tartozó Left és Top változókat:
    void MainFormPaint(object sender, PaintEventArgs e)
            {
                for (int i=0; i<3; i++) {
                        e.Graphics.DrawImage(egydenever[i].kepe,egydenever[i].kepe.Left,egydenever[i].kepe.Top,egydenever[i].kepe.Width,egydenever[i].kepe.Height);
                }
            }

    Ez miért van?
    És hogy miért pont SharpDevelop? Martonxnek is válaszolva: már régebben a gépemen pihen letöltve és csak most vettem elő. Az tetszett benne annakidején, hogy ingyenes és kicsi: csak letöltöd, kitömöríted és használatra kész. Nem tudom, van-e még ilyen fejlesztőkörnyezet, de nekem egyelőre bejön. :K Azt viszont én is sajnálom, hogy már nem fejlesztik tovább a készítői.

  • Tomi_78

    tag

    Bocs, az előbb javítottam és láttam, hogy nem kezdőérték nélküli a Deneverek tömb... Így javítottam a programomon, de most csak egy denevér jelenik meg, az sem animálódik és nem is mozog:
    namespace Animacios
    {    
        public partial class MainForm : Form
        {    
            Bitmap deneverkepe1 = new Bitmap("kepei\\kisdenever1bmp.bmp");
            Bitmap deneverkepe2 = new Bitmap("kepei\\kisdenever2bmp.bmp");
            
            class Deneverek
            {
                public int dirx,diry,xhely,yhely;
                public Bitmap kepe;
            };
            
            Deneverek[] egydenever;
            
            public MainForm()
            {
                //
                // The InitializeComponent() call is required for Windows Forms designer support.
                //
                InitializeComponent();
                //
                // TODO: Add constructor code after the InitializeComponent() call.
                //
                deneverkepe1.MakeTransparent();
                deneverkepe2.MakeTransparent();
                
                egydenever = new Deneverek[3];
                int svsz;
                for (int i=0; i<3; i++) {
                    egydenever[i]= new Deneverek();
                    System.Random vsz = new System.Random();
                    svsz = vsz.Next(1);
                    if (svsz==0) {
                        egydenever[i].dirx = -1;
                    } else {
                        egydenever[i].dirx = 1;
                    };
                    svsz = vsz.Next(1);
                    if (svsz==0) {
                        egydenever[i].diry = -1;
                    } else {
                        egydenever[i].diry = 1;
                    };
                    svsz = vsz.Next(1);
                    if (svsz==0) {
                        egydenever[i].kepe = deneverkepe1;
                    } else {
                        egydenever[i].kepe = deneverkepe2;
                    };
                    egydenever[i].xhely=vsz.Next(1,800-egydenever[i].kepe.Width);
                    egydenever[i].yhely=vsz.Next(1,600-egydenever[i].kepe.Height);
                };
            }
            void AnimIdozitoTick(object sender, EventArgs e)
            {
                for (int i=0; i<3; i++) {
                    if (egydenever[i].kepe==deneverkepe1) {
                        egydenever[i].kepe=deneverkepe2;
                    }
                    else {
                        egydenever[i].kepe=deneverkepe1;
                    };
                };
            }
            void MozgIdozitoTick(object sender, EventArgs e)
            {
                for (int i=0; i<3; i++) {
                    switch (egydenever[i].dirx) {
                        case -1:
                            if (egydenever[i].xhely>0) {
                                egydenever[i].xhely-=4;
                            }
                            else egydenever[i].dirx*=-1;
                        break;
                        case 1:
                            if (egydenever[i].xhely<800-egydenever[i].kepe.Width) {
                                egydenever[i].xhely+=4;
                            }
                            else egydenever[i].dirx*=-1;
                        break;
                    };
                    switch (egydenever[i].diry) {
                        case -1:
                            if (egydenever[i].yhely>0) {
                                egydenever[i].yhely-=4;
                            }
                            else egydenever[i].diry*=-1;
                        break;
                        case 1:
                            if (egydenever[i].yhely<600-egydenever[i].kepe.Height) {
                                egydenever[i].yhely+=4;
                            }
                            else egydenever[i].diry*=-1;
                        break;
                    };
                };
            }
            void MainFormPaint(object sender, PaintEventArgs e)
            {
                for (int i=0; i<3; i++) {
                        e.Graphics.DrawImage(egydenever[i].kepe,egydenever[i].xhely,egydenever[i].yhely,egydenever[i].kepe.Width,egydenever[i].kepe.Height);
                }
            }
        }
    }

  • Tomi_78

    tag

    válasz Tomi_78 #9346 üzenetére

    Na végre, minden működik, kivéve hogy a képek villognak egy kissé. Ezt nem lehet valahogy kiküszöbölni? Az Invalidate(); függvény ennyire akadozna?

  • Tomi_78

    tag

    válasz Keem1 #9348 üzenetére

    Utánanézek a könyvnek, bár nekem is vannak programozással (C++ és C# is) foglalkozó köteteim, igaz, végigolvasni még egyet sem volt időm vagy türelmem. Inkább célirányosan kutatok, ha szembesülök valami problémával, mert azt már nem kell nekem elmagyarázni, hogy mi a tömb, az elágazás vagy a ciklus, hanem inkább az olyan dolgokat, amik az adott fejlesztőkörnyezet sajátosságai, mint pl. hogy C#-ban hol kell elhelyezni a globális változókat a kódban vagy hogy bizonyos deklarálásokat milyen formában kell megadni.
    Lehet, hogy velem van a hiba, hogy szájbarágósan és nem bikkfanyelven várom el a szakkönyvektől is a magyarázatokat, dehát ez van.
    Az OOP lényegét is úgy mondanám el, hogy tagolva vannak benne a dolgok, az események csak azok szükségessége esetén hajtódnak végre, és nem folyamatosan, ciklikusan figyeli a program az összes tennivalót.

Új hozzászólás Aktív témák