来自静态上下文的非静态方法[比较两组类实例]

时间:2017-03-26 01:59:29

标签: java static-methods non-static

我已经阅读并了解错误本身意味着什么,以及一般如何解决它,但是我不确定如何在我创建两个不同的实例集的情况下两个不同的类(比较两个矩形是否发生碰撞),如果它们发生了 - 将一个移出另一个。

@{
    var user = HttpContext.Current.User.Identity.GetUserId();
    var bob = Model.Chat.Where(u => u.AssignToUserId == user).ToList();
    var sam = Model.Chat.Where(u => u.OwnerUserId == user).ToList();
    var allMessages = new List<T>();
    allMessages.AddRange(bob).AddRange(sam).OrderBy(x => x.Created);
}

@foreach (var message in allMessages)
{
    @if(message.OwnerUserId == message.OwnerUserId)
    {
        <div class="direct-chat-msg">
            <div class="direct-chat-info clearfix">
                <span class="direct-chat-name pull-left">@message.Item1.OwnerUser.DisplayName</span>
                <span class="direct-chat-timestamp pull-right">@message.Item1.Created</span>
            </div>
            <!-- /.direct-chat-info -->
            <div class="direct-chat-text">
                @message.Item1.Body
            </div>
            <!-- /.direct-chat-text -->
        </div>
    }
    else
    {
        <div class="direct-chat-msg right">
            <div class="direct-chat-info clearfix">
                <span class="direct-chat-name pull-right">@message.Item2.OwnerUser.DisplayName</span>
                <span class="direct-chat-timestamp pull-left">@message.Item2.Created</span>
            </div>
            <!-- /.direct-chat-info -->                                               
            <div class="direct-chat-text">
                @message.Item2.Body
            </div>
            <!-- /.direct-chat-text -->
        </div>
    }
}

(上图)这是创建NPC实例的类,它应该使用下面显示的方法检查每个NPC。

public class NPCManager {

public NPCManager(int amountNPC, int NPCGap) {
    //
    populateNPCS();
}

public void update() {
    for(RectNPC NPC : monsters)
        if(ObstacleManager.NPCCollide(NPC.getRectangle())) { //NPCCollide is the error
            //
        }
}

(上图)这是创建障碍物实例的类,它应该使用下面的方法检查NPC是否发生碰撞。

public class ObstacleManager {

public ObstacleManager(int playerGap, int obstacleGap, int obstacleHeight, int color, int doorcolor) {

    populateObstacles();
}

public boolean NPCCollide(RectNPC NPC) {
    for(Obstacle ob : obstacles) {
        if(ob.NPCCollide(NPC))
            return true;
    }
    return false;
}

(上图)自己创造障碍的课程。

管理员被使用,因此当游戏重新启动时,它可以按预期重新启动。

1 个答案:

答案 0 :(得分:2)

很难弄清楚代码的含义。 (代码风格违规没有帮助!)

但是,我想你是在问这个如何工作:

for(RectNPC NPC : monsters)
    if(ObstacleManager.NPCCollide(NPC.getRectangle())) { 
        //NPCCollide is the error
        //
    }

问题是NPCCollide(呃!样式违规)是一种实例方法。这意味着你必须在一个实例上调用它。但是ObstacleManager是一个类。

解决方案:创建ObstacleManager类的实例,并在该实例上调用实例方法。

但是,您的应用程序几乎肯定要求ObstacleManager只有一个实例。

解决方案(第2部分):阅读&#34; Singleton&#34;设计模式,并将您的ObstacleManager变成单身类。

参考文献: