c# widoczność funkcji 3586 3

O temacie

Autor RafalBudzis

Zaczęty 26.10.2012 roku

Wyświetleń 3586

Odpowiedzi 3

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy

RafalBudzis

c# widoczność funkcji
2012-10-26, 19:21(Ostatnia zmiana: 2012-10-26, 19:22)
Jak na razie jestem strasznym noobem w programowaniu obiektowym i mam problemy wynikające z niewiedzy.

Zrobiłem klase zarządzając wiadomościami (jest 5 wiadomości które potem siebie podmieniają i znikają od góry po określonym czasie)

Obiekt klasy wiadomości jest w klasie Game1

lecz chce mieć możliwość wyświetlenia wiadomości z każdej klasy jaka istnieje a nie tylko w Game1 jak to zrobić ?

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Funkcji w C# raczej nie ma, są metody...

Nie wiem, co tak naprawdę chcesz osiągnąć i czy jest ci to potrzebne. Żeby widzieć obiekt klasy wiadomości z Game1, to ten obiekt musi być publiczny oraz zrobić, że inne klasy dziedziczą po Game1, albo jest polem statycznym, albo przekazujesz w metodach ten obiekt do innych klas.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy

RafalBudzis

c# widoczność funkcji
#2 2012-10-26, 21:23(Ostatnia zmiana: 2012-10-26, 21:24)
Nie wiem, co tak naprawdę chcesz osiągnąć i czy jest ci to potrzebne.

mam tutaj te klase wiadomości :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;

namespace labirynt_3
{
    class wiadomosci
    {
        String[] tab_msg = new String[5];
        Vector2[] tab_poz = new Vector2[5];
        Rectangle[] tab_rec = new Rectangle[5];
        int[] tab_sec = new int[5];
        TimeSpan[] tab_time = new TimeSpan[5];

        SpriteFont font;
        Texture2D tex;
        public MSG(Game game,int x,int y) {
            tex = game.Content.Load<Texture2D>("MENU/niebieski_przycisk");
            font = game.Content.Load<SpriteFont>("Arial12");
            for (int i = 0; i < 5; i = i + 1)
            {
                tab_msg[i] = "";
                tab_poz[i] = new Vector2(10, (y-170) + (35 * i));
                tab_rec[i] = new Rectangle(0, (y-170) + (35 * i)-5, 300, 30);
                tab_sec[i] = 0;
                tab_time[i] = TimeSpan.Zero;
            }
       
        }

        public void update(GameTime GT)
        {
            for (int i = 0; i < 5; i = i + 1)
            {
                if (tab_sec[i] != 0)
                {
                    tab_time[i] += GT.ElapsedGameTime;

                    if (tab_time[i] > TimeSpan.FromSeconds(tab_sec[i]))
                    {
                        tab_sec[i] = 0;
                        tab_msg[i] = "";
                    }
                }
            }
       
        }
        public void Draw(SpriteBatch spriteBatch)
        {

            for (int i = 0; i < 5; i = i + 1)
            {
                if (tab_sec[i] != 0)
                {
                    spriteBatch.Draw(tex, tab_rec[i], Color.Black * 0.3f);
                    spriteBatch.DrawString(font, tab_msg[i], tab_poz[i], Color.White);
                }
            }
       
       
        }
        public void show_msg(String s0, int sekundy) {

            for (int i = 0; i <4; i = i + 1)
            {

                tab_msg[i] = tab_msg[i+1];
                tab_sec[i] = tab_sec[i+1];
                tab_time[i] = tab_time[i+1];
                tab_rec[i].Width = tab_rec[i+1].Width;
            }

            tab_msg[4] = s0;
            tab_sec[4] = sekundy;
            tab_time[4] = TimeSpan.Zero;
            tab_rec[4].Width = Convert.ToInt32(  font.MeasureString(s0).X ) + 20;
        }

    }
}

jest po prostu 5 wiadomości które się przewijają


Cytuj
Żeby widzieć obiekt klasy wiadomości z Game1, to ten obiekt musi być publiczny oraz zrobić, że inne klasy dziedziczą po Game1

A więc jak zrobić te dziedziczenie ?

Cytuj
albo jest polem statycznym, albo przekazujesz w metodach ten obiekt do innych klas.

Z statycznymi wychodzi mi tylko przy zmiennych int, string itp obiektów już tak nie umiem lub tak nie można ?? :D

Przekazywanie jako parametr na razie używałem ale długość tych parametrów zaczyna mnie przerażać jakoś muszę ogarnąć ten kod bo się już gubie.

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Jeśli chcesz dziedziczyć, to
class KlasaA : KlasaBale w twoim przypadku to będzie bez sensu.
Pola statyczne:
public static String[] tab_msg = new String[5];
Ale te dwa sposoby raczej odradzam.

Cytuj
Przekazywanie jako parametr na razie używałem ale długość tych parametrów zaczyna mnie przerażać jakoś muszę ogarnąć ten kod bo się już gubie.
Jak masz metodę, to po prostu przekażesz jej obiekt typu wiadomości.
metoda_w_klasieGame1(wiadomosci w)
{
}

Co do długości: chyba nie przekazujesz tylko "typów prostych" jak zmienna typu int, float, String?


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry