Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 45
1

При создании экземпляра класса в другом классе вылазит ошибка переполнения

24.04.2016, 13:05. Показов 624. Ответов 10
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Drawing;
 
namespace WindowsFormsApplication4
{
    /// <summary>
    /// ИИ
    /// </summary>
    [Serializable]
    class AI : Firefly
    {
        private PointF targetPoint;
        private float timeToChangeTargetPoint;
        Sun rd = new Sun();
        public override void Update(float dt)
        {
 
            timeToChangeTargetPoint -= dt;
            
            if (!IsDead)
                if (timeToChangeTargetPoint <= 0 || targetPoint.Distance(Location) < Radius )//|| targetPoint.Distance(Location) > rd.Radius
                {
                    //меняем направление движения
                    targetPoint = Game.Instance.GetRndPoint();
                    timeToChangeTargetPoint = 100;
 
                    var d = new PointF(targetPoint.X - Location.X, targetPoint.Y - Location.Y);
                    var l = d.Distance(PointF.Empty);
 
                    Velocity = new PointF(MaxSpeed * d.X / l, MaxSpeed * d.Y / l);
                }
 
            //башня - на игрока
            var p = Game.Instance.Player.Location;
            TowerDirection = new PointF(p.X - Location.X, p.Y - Location.Y);
 
            //стреляем постоянно
            if (!Game.Instance.Player.IsDead)
                if (Game.Rnd.Next(15) == 1)
                {
                    Fire();
                }
 
            base.Update(dt);
        }
 
        public override void OnCoollide(GameItem otherItem)
        {
            if (otherItem == null || otherItem.Mass >= Mass)
                timeToChangeTargetPoint = 0;//будем менять направление
 
            base.OnCoollide(otherItem);
        }
    }
}
Проблема в Sun rd = new Sun(); от этого класса мне нужно свойство Radius для того что бы ИИ не выбирал точкой следования планету выражением || targetPoint.Distance(Location) > rd.Radius, но ПО вылетает при попытке объявления экземпляра класса SUN.

Как можно по другому это свойство выделить?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2016, 13:05
Ответы с готовыми решениями:

Ошибка при создании экземпляра класса
Почему выдает такую ошибку?(С base уже пробовал, не работает) Код программы: Form1.cs: using...

Ошибка при создании экземпляра класса
На скринах показано, где ошибка Вот код: #include &lt;iostream&gt; #include &lt;string&gt; #include...

Обьявление экземпляра класса в другом классе
Здравствуйте дорогие форумчане, не могу понять почему дочерний класс контроллера, не вызывает метод...

Ошибка при создании экземпляра класса Database
Всем доброго времени суток. Выходит ошибка, когда пытаюсь создать экземпляр класса Database:...

10
Эксперт .NET
15564 / 11812 / 3099
Регистрация: 17.09.2011
Сообщений: 19,725
24.04.2016, 14:12 2
r3dok, как выглядит класс Sun?
0
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 45
24.04.2016, 21:05  [ТС] 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
 
namespace WindowsFormsApplication4
{
    class Sun : GameItem
    {
        public Sun()
        {
            Location = Game.Instance.SunPos();
            Radius = 90;
            Mass = 9001; //over9000 !!!!
        }
        public override void Draw(Graphics gr)
        {
            var img = Properties.Resources.Sun;
            gr.ResetTransform();
            gr.TranslateTransform(Location.X, Location.Y);
            gr.DrawImage(img, -130, -120);
 
            base.Draw(gr);
        }
 
        public override void OnCoollide(GameItem otherItem)
        {
 
            if (otherItem is Firefly)//капец
                (otherItem as Firefly).IsDead = true;
        }
    }
}
Цитата Сообщение от kolorotur Посмотреть сообщение
r3dok, как выглядит класс Sun?
Вот класс Sun
0
991 / 769 / 453
Регистрация: 09.04.2014
Сообщений: 1,848
24.04.2016, 22:14 4
Цитата Сообщение от r3dok Посмотреть сообщение
Location = Game.Instance.SunPos();
не тут ли собака зарыта?
0
Эксперт .NET
15564 / 11812 / 3099
Регистрация: 17.09.2011
Сообщений: 19,725
25.04.2016, 00:25 5
Цитата Сообщение от r3dok Посмотреть сообщение
Вот класс Sun
Что происходит в методе Game.Instance.SunPos()?
0
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 45
25.04.2016, 00:43  [ТС] 6
Цитата Сообщение от kolorotur Посмотреть сообщение
r3dok, как выглядит класс Sun?
Цитата Сообщение от kolorotur Посмотреть сообщение
Вот класс Sun
Что происходит в методе Game.Instance.SunPos()?
Цитата Сообщение от nedel Посмотреть сообщение
не тут ли собака зарыта?
Там задаются координаты объекта что бы он по центру был, у других объектов (пока игрок и противник) задаются рандомной позицией вот код игровой механики где есть SunPos

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
 
namespace WindowsFormsApplication4
{
    [Serializable]
    internal class Game
    {
        public static Game Instance { get; private set; }
        public static Random Rnd = new Random();
        public static Point MousePosition { get; set; }
        public static MouseButtons MouseButtons { get; set; }
        public Size FieldSize = new Size(1280, 720);
        public readonly List<GameItem> Items = new List<GameItem>();
        public Firefly Player { get; set; }
        public static bool DebugMode { get; set; }
        public Game()
        {
            Instance = this;
            Player = new Player();
            Game.DebugMode = true;
            //Добавить бота
            new AI();
            new Sun();
        }
 
        internal void Update()
        {
            var dt = 0.4f;
 
            foreach (var item in Items.ToList())
                item.Update(dt);
 
            new Collider().Update();
        }
 
        internal void Draw(Graphics gr)
        {
            foreach (var item in Items)
                item.Draw(gr);
        }
        public PointF GetRndPoint()
        {
            return new PointF(Rnd.Next(FieldSize.Width - 40), Rnd.Next(FieldSize.Height - 40));
        }
        public PointF SunPos()
        {
            return new PointF(640, 360);
        }
    }
}
0
Эксперт .NETАвтор FAQ
10299 / 5033 / 1821
Регистрация: 11.01.2015
Сообщений: 6,224
Записей в блоге: 34
25.04.2016, 09:47 7
r3dok, Вам не нужно создавать объект Sun внутри объекта AI. Это неправильно. Вам нужно использовать объект Sun из коллекции Game.Instance.Items где и содержатся все игровые объекты.
1
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 45
25.04.2016, 16:29  [ТС] 8
Спасибо, попробую сделать так как вы сказали!
0
Эксперт .NET
15564 / 11812 / 3099
Регистрация: 17.09.2011
Сообщений: 19,725
25.04.2016, 16:32 9
r3dok, до кучи покажите еще код класса GameItem, а то сдается мне что у вас там где-то рекурсивное создание экземпляров притаилось.
0
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 45
25.04.2016, 21:45  [ТС] 10
Цитата Сообщение от kolorotur Посмотреть сообщение
r3dok, до кучи покажите еще код класса GameItem, а то сдается мне что у вас там где-то рекурсивное создание экземпляров притаилось.
Тут выше писал сам автор кода, я его изменяю под свои нужды, он объяснил как передать свойства. Вот код.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
 
namespace WindowsFormsApplication4
{
    /// <summary>
    /// базовый класс для игровых объектов
    /// </summary>
    [Serializable]
    abstract class GameItem
    {
        public PointF Location { get; set; }
        public int Radius { get; protected set; }
        public virtual void Update(float dt) { ;}
        public float Mass { get; set; }
        public virtual void OnCoollide(GameItem otherItem) { ;}
 
        public GameItem()
        {
            Game.Instance.Items.Add(this);
        }
 
        public void Remove()
        {
            Game.Instance.Items.Remove(this);
        }
 
        public virtual void Draw(Graphics gr)
        {
            if (Game.DebugMode)
                gr.DrawEllipse(Pens.Red, -Radius, -Radius, 2 * Radius, 2 * Radius);
        }
    }
}
Добавлено через 1 час 31 минуту
Storm23 в Game.Instance.Items не могу понять как инициализировать объект через эту команду, почитал , что он делает сортировки,сравнения, поиск (с ним вообще я ничего не понял) и разные вещи, но не возвращает объект из листа или свойства объекта.

Вообще мой косяк что выбрал свою тему, хотя тут переделывать не так много пришлось. Выбрал бы сапера какого нибудь и бы набыдлокодил за 2 джня, а тут пытаюсь как препод нас учил инициализировать и подстава. Мы классы только одну пару назад как ДЗ получили и то я вмето класса цикл отрисовки сделалил за что получил %) . Пришлось переделывать и ничего не вышло, пока учусь программировать, еще 3.5 года есть до диплома.
0
Эксперт .NETАвтор FAQ
10299 / 5033 / 1821
Регистрация: 11.01.2015
Сообщений: 6,224
Записей в блоге: 34
25.04.2016, 21:56 11
Цитата Сообщение от r3dok Посмотреть сообщение
Game.Instance.Items не могу понять как инициализировать объект через эту команду
1) В C# нет "команд"
2) Game.Instance.Items это не команда, это список.
3) Если вы имеет ввиду, что вам нужно получить объект типа Sun из списка, то вот так:
C#
1
var sun = Game.Instance.Items.OfType<Sun>().FirstOrDefault();
(в директивах прописать using System.Linq;)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2016, 21:56

Ошибка при создании экземпляра шаблонного класса
Есть шаблонный управляемый класс, не знаю как создать его экземпляр в динамической памяти. ...

Ошибка при создании экземпляра абстрактного класса
Пытаюсь создать Silverlight веб-приложение в Visual Studio 2010 pro по руководству:...

При создании экземпляра класса, создается 2 экземпляра вместо 1
Подсчет экземпляров ведется с помощью статического члена num_dogs, который во всех трех...

Ошибка в создании экземпляра класса
Начал изучать шаблоны , и не могу переделать , подскажите что не так . template &lt;class data_one&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru